From e559f270d9a970ca2b61ddabe8dc336b327a2b6b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Amaury=20S=C3=A9chet?= Date: Wed, 14 Jun 2023 12:57:02 +0000 Subject: [PATCH] [NFC] Add tests cases for isTruncateOf for D151916 --- llvm/test/CodeGen/X86/dagcombine-select.ll | 63 +++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/llvm/test/CodeGen/X86/dagcombine-select.ll b/llvm/test/CodeGen/X86/dagcombine-select.ll index ff022c3..be9c397 100644 --- a/llvm/test/CodeGen/X86/dagcombine-select.ll +++ b/llvm/test/CodeGen/X86/dagcombine-select.ll @@ -206,6 +206,23 @@ define i32 @shl_constant_sel_constants(i1 %cond) { ret i32 %bo } +define i32 @shl_constant_sel_setcc(i32 %a) { +; CHECK-LABEL: shl_constant_sel_setcc: +; CHECK: # %bb.0: +; CHECK-NEXT: movl %edi, %ecx +; CHECK-NEXT: andb $1, %cl +; CHECK-NEXT: xorb $3, %cl +; CHECK-NEXT: movl $1, %eax +; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx +; CHECK-NEXT: shll %cl, %eax +; CHECK-NEXT: retq + %m = and i32 %a, 1 + %cond = icmp ne i32 %m, 0 + %sel = select i1 %cond, i32 2, i32 3 + %bo = shl i32 1, %sel + ret i32 %bo +} + define i32 @lshr_constant_sel_constants(i1 %cond) { ; CHECK-LABEL: lshr_constant_sel_constants: ; CHECK: # %bb.0: @@ -221,6 +238,23 @@ define i32 @lshr_constant_sel_constants(i1 %cond) { ret i32 %bo } +define i32 @lshr_constant_sel_setcc(i32 %a) { +; CHECK-LABEL: lshr_constant_sel_setcc: +; CHECK: # %bb.0: +; CHECK-NEXT: movl %edi, %ecx +; CHECK-NEXT: andb $1, %cl +; CHECK-NEXT: xorb $3, %cl +; CHECK-NEXT: movl $64, %eax +; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx +; CHECK-NEXT: shrl %cl, %eax +; CHECK-NEXT: retq + %m = and i32 %a, 1 + %cond = icmp ne i32 %m, 0 + %sel = select i1 %cond, i32 2, i32 3 + %bo = lshr i32 64, %sel + ret i32 %bo +} + define i32 @ashr_constant_sel_constants(i1 %cond) { ; CHECK-LABEL: ashr_constant_sel_constants: ; CHECK: # %bb.0: @@ -236,15 +270,32 @@ define i32 @ashr_constant_sel_constants(i1 %cond) { ret i32 %bo } +define i32 @ashr_constant_sel_setcc(i32 %a) { +; CHECK-LABEL: ashr_constant_sel_setcc: +; CHECK: # %bb.0: +; CHECK-NEXT: movl %edi, %ecx +; CHECK-NEXT: andb $1, %cl +; CHECK-NEXT: xorb $3, %cl +; CHECK-NEXT: movl $128, %eax +; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx +; CHECK-NEXT: shrl %cl, %eax +; CHECK-NEXT: retq + %m = and i32 %a, 1 + %cond = icmp ne i32 %m, 0 + %sel = select i1 %cond, i32 2, i32 3 + %bo = ashr i32 128, %sel + ret i32 %bo +} + define double @fsub_constant_sel_constants(i1 %cond) { ; CHECK-LABEL: fsub_constant_sel_constants: ; CHECK: # %bb.0: ; CHECK-NEXT: testb $1, %dil -; CHECK-NEXT: jne .LBB17_1 +; CHECK-NEXT: jne .LBB20_1 ; CHECK-NEXT: # %bb.2: ; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero ; CHECK-NEXT: retq -; CHECK-NEXT: .LBB17_1: +; CHECK-NEXT: .LBB20_1: ; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero ; CHECK-NEXT: retq %sel = select i1 %cond, double -4.0, double 23.3 @@ -256,11 +307,11 @@ define double @fdiv_constant_sel_constants(i1 %cond) { ; CHECK-LABEL: fdiv_constant_sel_constants: ; CHECK: # %bb.0: ; CHECK-NEXT: testb $1, %dil -; CHECK-NEXT: jne .LBB18_1 +; CHECK-NEXT: jne .LBB21_1 ; CHECK-NEXT: # %bb.2: ; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero ; CHECK-NEXT: retq -; CHECK-NEXT: .LBB18_1: +; CHECK-NEXT: .LBB21_1: ; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero ; CHECK-NEXT: retq %sel = select i1 %cond, double -4.0, double 23.3 @@ -272,11 +323,11 @@ define double @frem_constant_sel_constants(i1 %cond) { ; CHECK-LABEL: frem_constant_sel_constants: ; CHECK: # %bb.0: ; CHECK-NEXT: testb $1, %dil -; CHECK-NEXT: jne .LBB19_1 +; CHECK-NEXT: jne .LBB22_1 ; CHECK-NEXT: # %bb.2: ; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero ; CHECK-NEXT: retq -; CHECK-NEXT: .LBB19_1: +; CHECK-NEXT: .LBB22_1: ; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero ; CHECK-NEXT: retq %sel = select i1 %cond, double -4.0, double 23.3 -- 2.7.4