The motivation is that the update script has at least two deviations (`<...>@GOT`/`<...>@PLT`/ and not hiding pointer arithmetics) from what pretty much all the checklines were generated with, and most of the tests are still not updated, so each time one of the non-up-to-date tests is updated to see the effect of the code change, there is a lot of noise. Instead of having to deal with that each time, let's just deal with everything at once. This has been done via: ``` cd llvm-project/llvm/test/CodeGen/X86 grep -rl "; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py" | xargs -L1 <...>/llvm-project/llvm/utils/update_llc_test_checks.py --llc-binary <...>/llvm-project/build/bin/llc ``` Not all tests were regenerated, however.
148 lines
4.8 KiB
LLVM
148 lines
4.8 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -O3 --x86-asm-syntax=intel -mtriple=x86_64-grtev4-linux-gnu -march=x86-64 -mattr=avx < %s | FileCheck %s
|
|
|
|
define void @extracter0([4 x <4 x i1>] %matrix) {
|
|
; CHECK-LABEL: extracter0:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: push rbp
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: push r14
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
|
; CHECK-NEXT: push rbx
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: .cfi_offset rbx, -32
|
|
; CHECK-NEXT: .cfi_offset r14, -24
|
|
; CHECK-NEXT: .cfi_offset rbp, -16
|
|
; CHECK-NEXT: vpslld xmm0, xmm0, 31
|
|
; CHECK-NEXT: vmovmskps edi, xmm0
|
|
; CHECK-NEXT: mov ebp, edi
|
|
; CHECK-NEXT: shr bpl, 3
|
|
; CHECK-NEXT: mov r14d, edi
|
|
; CHECK-NEXT: and r14b, 4
|
|
; CHECK-NEXT: shr r14b, 2
|
|
; CHECK-NEXT: mov ebx, edi
|
|
; CHECK-NEXT: and bl, 2
|
|
; CHECK-NEXT: shr bl
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, bl
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, r14b
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, bpl
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: pop rbx
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
|
; CHECK-NEXT: pop r14
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: pop rbp
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 8
|
|
; CHECK-NEXT: ret
|
|
%1 = extractvalue [4 x <4 x i1>] %matrix, 0
|
|
%2 = extractelement <4 x i1> %1, i64 0
|
|
%3 = extractelement <4 x i1> %1, i64 1
|
|
%4 = extractelement <4 x i1> %1, i64 2
|
|
%5 = extractelement <4 x i1> %1, i64 3
|
|
call void @print_i1(i1 %2)
|
|
call void @print_i1(i1 %3)
|
|
call void @print_i1(i1 %4)
|
|
call void @print_i1(i1 %5)
|
|
ret void
|
|
}
|
|
|
|
define void @extracter1([4 x <4 x i1>] %matrix) {
|
|
; CHECK-LABEL: extracter1:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: push rbp
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: push r15
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
|
; CHECK-NEXT: push r14
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: push r13
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 40
|
|
; CHECK-NEXT: push r12
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
|
; CHECK-NEXT: push rbx
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 56
|
|
; CHECK-NEXT: push rax
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 64
|
|
; CHECK-NEXT: .cfi_offset rbx, -56
|
|
; CHECK-NEXT: .cfi_offset r12, -48
|
|
; CHECK-NEXT: .cfi_offset r13, -40
|
|
; CHECK-NEXT: .cfi_offset r14, -32
|
|
; CHECK-NEXT: .cfi_offset r15, -24
|
|
; CHECK-NEXT: .cfi_offset rbp, -16
|
|
; CHECK-NEXT: vpslld xmm1, xmm1, 31
|
|
; CHECK-NEXT: vmovmskps ebp, xmm1
|
|
; CHECK-NEXT: mov eax, ebp
|
|
; CHECK-NEXT: shr al, 3
|
|
; CHECK-NEXT: mov byte ptr [rsp + 7], al # 1-byte Spill
|
|
; CHECK-NEXT: mov r15d, ebp
|
|
; CHECK-NEXT: and r15b, 4
|
|
; CHECK-NEXT: shr r15b, 2
|
|
; CHECK-NEXT: mov r13d, ebp
|
|
; CHECK-NEXT: and r13b, 2
|
|
; CHECK-NEXT: shr r13b
|
|
; CHECK-NEXT: vpslld xmm0, xmm0, 31
|
|
; CHECK-NEXT: vmovmskps edi, xmm0
|
|
; CHECK-NEXT: mov r12d, edi
|
|
; CHECK-NEXT: shr r12b, 3
|
|
; CHECK-NEXT: mov ebx, edi
|
|
; CHECK-NEXT: and bl, 4
|
|
; CHECK-NEXT: shr bl, 2
|
|
; CHECK-NEXT: mov r14d, edi
|
|
; CHECK-NEXT: and r14b, 2
|
|
; CHECK-NEXT: shr r14b
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, r14b
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, bl
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, r12b
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: mov edi, ebp
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, r13b
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, r15b
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: movzx edi, byte ptr [rsp + 7] # 1-byte Folded Reload
|
|
; CHECK-NEXT: call print_i1@PLT
|
|
; CHECK-NEXT: add rsp, 8
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 56
|
|
; CHECK-NEXT: pop rbx
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 48
|
|
; CHECK-NEXT: pop r12
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 40
|
|
; CHECK-NEXT: pop r13
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: pop r14
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
|
; CHECK-NEXT: pop r15
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: pop rbp
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 8
|
|
; CHECK-NEXT: ret
|
|
%1 = extractvalue [4 x <4 x i1>] %matrix, 0
|
|
%2 = extractelement <4 x i1> %1, i64 0
|
|
%3 = extractelement <4 x i1> %1, i64 1
|
|
%4 = extractelement <4 x i1> %1, i64 2
|
|
%5 = extractelement <4 x i1> %1, i64 3
|
|
call void @print_i1(i1 %2)
|
|
call void @print_i1(i1 %3)
|
|
call void @print_i1(i1 %4)
|
|
call void @print_i1(i1 %5)
|
|
%6 = extractvalue [4 x <4 x i1>] %matrix, 1
|
|
%7 = extractelement <4 x i1> %6, i64 0
|
|
%8 = extractelement <4 x i1> %6, i64 1
|
|
%9 = extractelement <4 x i1> %6, i64 2
|
|
%10 = extractelement <4 x i1> %6, i64 3
|
|
call void @print_i1(i1 %7)
|
|
call void @print_i1(i1 %8)
|
|
call void @print_i1(i1 %9)
|
|
call void @print_i1(i1 %10)
|
|
ret void
|
|
}
|
|
|
|
declare void @print_i1(i1)
|