diff options
| author | Reid Kleckner <rnk@google.com> | 2018-03-23 23:38:53 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2018-03-23 23:38:53 +0000 |
| commit | e27b410661f5e3a8ead2645eb27567a376668e0f (patch) | |
| tree | afe11a5bc3903ab05a8671a11075de5d3c0ad7bd /llvm/test/CodeGen | |
| parent | 5cd35ed4fe72d96354c6f17ae071747ea62f0f14 (diff) | |
| download | bcm5719-llvm-e27b410661f5e3a8ead2645eb27567a376668e0f.tar.gz bcm5719-llvm-e27b410661f5e3a8ead2645eb27567a376668e0f.zip | |
[X86] Fix Windows `i1 zeroext` conventions to use i8 instead of i32
Both GCC and MSVC only look at the low byte of a boolean when it is
passed.
llvm-svn: 328386
Diffstat (limited to 'llvm/test/CodeGen')
| -rw-r--r-- | llvm/test/CodeGen/X86/avx512-intel-ocl.ll | 2 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/h-registers-0.ll | 3 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/test-shrink.ll | 4 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/vec_cast.ll | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/win32-bool.ll | 33 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/win64-bool.ll | 23 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/xor.ll | 5 |
7 files changed, 76 insertions, 2 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-intel-ocl.ll b/llvm/test/CodeGen/X86/avx512-intel-ocl.ll index 61718fb8c04..defedd2a7f6 100644 --- a/llvm/test/CodeGen/X86/avx512-intel-ocl.ll +++ b/llvm/test/CodeGen/X86/avx512-intel-ocl.ll @@ -420,6 +420,7 @@ define <16 x float> @testf16_inp_mask(<16 x float> %a, i16 %mask) { ; WIN64-KNL-NEXT: subq $40, %rsp ; WIN64-KNL-NEXT: .seh_stackalloc 40 ; WIN64-KNL-NEXT: .seh_endprologue +; WIN64-KNL-NEXT: # kill: def $dx killed $dx def $edx ; WIN64-KNL-NEXT: vmovaps (%rcx), %zmm0 ; WIN64-KNL-NEXT: kmovw %edx, %k1 ; WIN64-KNL-NEXT: callq func_float16_mask @@ -435,6 +436,7 @@ define <16 x float> @testf16_inp_mask(<16 x float> %a, i16 %mask) { ; WIN64-SKX-NEXT: subq $40, %rsp ; WIN64-SKX-NEXT: .seh_stackalloc 40 ; WIN64-SKX-NEXT: .seh_endprologue +; WIN64-SKX-NEXT: # kill: def $dx killed $dx def $edx ; WIN64-SKX-NEXT: vmovaps (%rcx), %zmm0 ; WIN64-SKX-NEXT: kmovd %edx, %k1 ; WIN64-SKX-NEXT: callq func_float16_mask diff --git a/llvm/test/CodeGen/X86/h-registers-0.ll b/llvm/test/CodeGen/X86/h-registers-0.ll index 5f459c3c459..dfd79f39b6e 100644 --- a/llvm/test/CodeGen/X86/h-registers-0.ll +++ b/llvm/test/CodeGen/X86/h-registers-0.ll @@ -98,7 +98,8 @@ define i16 @qux16(i16 inreg %x) nounwind { ; X86-64: movzbl %ah, %eax ; WIN64-LABEL: qux16: -; WIN64: movzbl %ch, %eax +; WIN64: movzwl %cx, %eax +; WIN64: shrl $8, %eax ; X86-32-LABEL: qux16: ; X86-32: movzbl %ah, %eax diff --git a/llvm/test/CodeGen/X86/test-shrink.ll b/llvm/test/CodeGen/X86/test-shrink.ll index e44233fdd94..5a5981462a5 100644 --- a/llvm/test/CodeGen/X86/test-shrink.ll +++ b/llvm/test/CodeGen/X86/test-shrink.ll @@ -186,6 +186,7 @@ define void @g16xh(i16 inreg %x) nounwind { ; CHECK-WIN32-64-LABEL: g16xh: ; CHECK-WIN32-64: # %bb.0: ; CHECK-WIN32-64-NEXT: subq $40, %rsp +; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN32-64-NEXT: testl $2048, %ecx # imm = 0x800 ; CHECK-WIN32-64-NEXT: jne .LBB4_2 ; CHECK-WIN32-64-NEXT: # %bb.1: # %yes @@ -228,6 +229,7 @@ define void @g16xl(i16 inreg %x) nounwind { ; CHECK-WIN32-64-LABEL: g16xl: ; CHECK-WIN32-64: # %bb.0: ; CHECK-WIN32-64-NEXT: subq $40, %rsp +; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN32-64-NEXT: testb $8, %cl ; CHECK-WIN32-64-NEXT: jne .LBB5_2 ; CHECK-WIN32-64-NEXT: # %bb.1: # %yes @@ -497,6 +499,7 @@ define void @truncand32(i16 inreg %x) nounwind { ; CHECK-WIN32-64-LABEL: truncand32: ; CHECK-WIN32-64: # %bb.0: ; CHECK-WIN32-64-NEXT: subq $40, %rsp +; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN32-64-NEXT: testl $2049, %ecx # imm = 0x801 ; CHECK-WIN32-64-NEXT: je .LBB11_1 ; CHECK-WIN32-64-NEXT: # %bb.2: # %no @@ -543,6 +546,7 @@ define void @testw(i16 inreg %x) nounwind minsize { ; CHECK-WIN32-64-LABEL: testw: ; CHECK-WIN32-64: # %bb.0: ; CHECK-WIN32-64-NEXT: subq $40, %rsp +; CHECK-WIN32-64-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN32-64-NEXT: testw $2049, %cx # imm = 0x801 ; CHECK-WIN32-64-NEXT: jne .LBB12_2 ; CHECK-WIN32-64-NEXT: # %bb.1: # %yes diff --git a/llvm/test/CodeGen/X86/vec_cast.ll b/llvm/test/CodeGen/X86/vec_cast.ll index e6e59829e00..f6b1ac14490 100644 --- a/llvm/test/CodeGen/X86/vec_cast.ll +++ b/llvm/test/CodeGen/X86/vec_cast.ll @@ -37,6 +37,9 @@ define <3 x i32> @b(<3 x i16> %a) nounwind { ; ; CHECK-WIN-LABEL: b: ; CHECK-WIN: # %bb.0: +; CHECK-WIN-NEXT: # kill: def $r8w killed $r8w def $r8d +; CHECK-WIN-NEXT: # kill: def $dx killed $dx def $edx +; CHECK-WIN-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN-NEXT: movd %ecx, %xmm0 ; CHECK-WIN-NEXT: pinsrw $1, %edx, %xmm0 ; CHECK-WIN-NEXT: pinsrw $2, %r8d, %xmm0 @@ -58,6 +61,7 @@ define <1 x i32> @c(<1 x i16> %a) nounwind { ; ; CHECK-WIN-LABEL: c: ; CHECK-WIN: # %bb.0: +; CHECK-WIN-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN-NEXT: movd %ecx, %xmm0 ; CHECK-WIN-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7] ; CHECK-WIN-NEXT: psrad $16, %xmm0 @@ -100,6 +104,9 @@ define <3 x i32> @e(<3 x i16> %a) nounwind { ; ; CHECK-WIN-LABEL: e: ; CHECK-WIN: # %bb.0: +; CHECK-WIN-NEXT: # kill: def $r8w killed $r8w def $r8d +; CHECK-WIN-NEXT: # kill: def $dx killed $dx def $edx +; CHECK-WIN-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN-NEXT: movd %ecx, %xmm0 ; CHECK-WIN-NEXT: pinsrw $1, %edx, %xmm0 ; CHECK-WIN-NEXT: pinsrw $2, %r8d, %xmm0 @@ -121,6 +128,7 @@ define <1 x i32> @f(<1 x i16> %a) nounwind { ; ; CHECK-WIN-LABEL: f: ; CHECK-WIN: # %bb.0: +; CHECK-WIN-NEXT: # kill: def $cx killed $cx def $ecx ; CHECK-WIN-NEXT: movd %ecx, %xmm0 ; CHECK-WIN-NEXT: pxor %xmm1, %xmm1 ; CHECK-WIN-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] diff --git a/llvm/test/CodeGen/X86/win32-bool.ll b/llvm/test/CodeGen/X86/win32-bool.ll new file mode 100644 index 00000000000..53607ea06c7 --- /dev/null +++ b/llvm/test/CodeGen/X86/win32-bool.ll @@ -0,0 +1,33 @@ +; RUN: llc < %s -mtriple=i686-windows-msvc | FileCheck %s +; RUN: llc < %s -mtriple=i686-windows-gnu | FileCheck %s + +define x86_fastcallcc i32 @pass_fast_bool(i1 inreg zeroext %b) { +entry: + %cond = select i1 %b, i32 66, i32 0 + ret i32 %cond +} + +; CHECK-LABEL: @pass_fast_bool@4: +; CHECK-DAG: testb %cl, %cl +; CHECK-DAG: movl $66, +; CHECK: retl + +define x86_vectorcallcc i32 @pass_vector_bool(i1 inreg zeroext %b) { +entry: + %cond = select i1 %b, i32 66, i32 0 + ret i32 %cond +} + +; CHECK-LABEL: pass_vector_bool@@4: +; CHECK-DAG: testb %cl, %cl +; CHECK-DAG: movl $66, +; CHECK: retl + +define zeroext i1 @ret_true() { +entry: + ret i1 true +} + +; CHECK-LABEL: ret_true: +; CHECK: movb $1, %al +; CHECK: retl diff --git a/llvm/test/CodeGen/X86/win64-bool.ll b/llvm/test/CodeGen/X86/win64-bool.ll new file mode 100644 index 00000000000..cb77c7ed201 --- /dev/null +++ b/llvm/test/CodeGen/X86/win64-bool.ll @@ -0,0 +1,23 @@ +; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefix=CHECK +; RUN: llc < %s -mtriple=x86_64-windows-gnu | FileCheck %s --check-prefix=CHECK + +define i32 @pass_bool(i1 zeroext %b) { +entry: + %cond = select i1 %b, i32 66, i32 0 + ret i32 %cond +} + +; CHECK-LABEL: pass_bool: +; CHECK-DAG: testb %cl, %cl +; CHECK-DAG: movl $66, +; CHECK: cmovel {{.*}}, %eax +; CHECK: retq + +define zeroext i1 @ret_true() { +entry: + ret i1 true +} + +; CHECK-LABEL: ret_true: +; CHECK: movb $1, %al +; CHECK: retq diff --git a/llvm/test/CodeGen/X86/xor.ll b/llvm/test/CodeGen/X86/xor.ll index 6f0f0df465c..f73fdb21b96 100644 --- a/llvm/test/CodeGen/X86/xor.ll +++ b/llvm/test/CodeGen/X86/xor.ll @@ -167,6 +167,8 @@ define i16 @test5(i16 %a, i16 %b) nounwind { ; ; X64-WIN-LABEL: test5: ; X64-WIN: # %bb.0: # %entry +; X64-WIN-NEXT: # kill: def $dx killed $dx def $edx +; X64-WIN-NEXT: # kill: def $cx killed $cx def $ecx ; X64-WIN-NEXT: .p2align 4, 0x90 ; X64-WIN-NEXT: .LBB4_1: # %bb ; X64-WIN-NEXT: # =>This Inner Loop Header: Depth=1 @@ -427,7 +429,8 @@ define i32 @PR17487(i1 %tobool) { ; ; X64-WIN-LABEL: PR17487: ; X64-WIN: # %bb.0: -; X64-WIN-NEXT: movd %ecx, %xmm0 +; X64-WIN-NEXT: movzbl %cl, %eax +; X64-WIN-NEXT: movd %eax, %xmm0 ; X64-WIN-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] ; X64-WIN-NEXT: pandn __xmm@{{.*}}(%rip), %xmm0 ; X64-WIN-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] |

