From: Sanjay Patel Date: Wed, 20 Sep 2017 21:25:02 +0000 (+0000) Subject: [SimplifyCFG] auto-generate full checks; NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e50186c89bd843716e79058edf749aaf5f579b4;p=llvm [SimplifyCFG] auto-generate full checks; NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313821 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/SimplifyCFG/rangereduce.ll b/test/Transforms/SimplifyCFG/rangereduce.ll index 13bbdfe83d0..fc48fc9f5f9 100644 --- a/test/Transforms/SimplifyCFG/rangereduce.ll +++ b/test/Transforms/SimplifyCFG/rangereduce.ll @@ -1,23 +1,35 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -latesimplifycfg -S | FileCheck %s target datalayout = "e-n32" -; CHECK-LABEL: @test1 -; CHECK: %[[SUB:.*]] = sub i32 %a, 97 -; CHECK: %[[LSHR:.*]] = lshr i32 %[[SUB]], 2 -; CHECK: %[[SHL:.*]] = shl i32 %[[SUB]], 30 -; CHECK: %[[OR:.*]] = or i32 %[[LSHR]], %[[SHL]] -; CHECK: switch i32 %[[OR]], label %def [ -; CHECK: i32 0, label %one -; CHECK: i32 1, label %two -; CHECK: i32 2, label %three -; CHECK: ] define i32 @test1(i32 %a) { +; CHECK-LABEL: @test1( +; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[A:%.*]], 97 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 2 +; CHECK-NEXT: [[TMP3:%.*]] = shl i32 [[TMP1]], 30 +; CHECK-NEXT: [[TMP4:%.*]] = or i32 [[TMP2]], [[TMP3]] +; CHECK-NEXT: switch i32 [[TMP4]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 0, label [[ONE:%.*]] +; CHECK-NEXT: i32 1, label [[TWO:%.*]] +; CHECK-NEXT: i32 2, label [[THREE:%.*]] +; CHECK-NEXT: i32 3, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 97, label %one - i32 101, label %two - i32 105, label %three - i32 109, label %three + i32 97, label %one + i32 101, label %two + i32 105, label %three + i32 109, label %three ] def: @@ -32,14 +44,29 @@ three: } ; Optimization shouldn't trigger; bitwidth > 64 -; CHECK-LABEL: @test2 -; CHECK: switch i128 %a, label %def define i128 @test2(i128 %a) { +; CHECK-LABEL: @test2( +; CHECK-NEXT: switch i128 [[A:%.*]], label [[DEF:%.*]] [ +; CHECK-NEXT: i128 97, label [[ONE:%.*]] +; CHECK-NEXT: i128 101, label [[TWO:%.*]] +; CHECK-NEXT: i128 105, label [[THREE:%.*]] +; CHECK-NEXT: i128 109, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i128 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i128 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i128 %a, label %def [ - i128 97, label %one - i128 101, label %two - i128 105, label %three - i128 109, label %three + i128 97, label %one + i128 101, label %two + i128 105, label %three + i128 109, label %three ] def: @@ -53,15 +80,28 @@ three: ret i128 99783 } - ; Optimization shouldn't trigger; no holes present -; CHECK-LABEL: @test3 -; CHECK: switch i32 %a, label %def define i32 @test3(i32 %a) { +; CHECK-LABEL: @test3( +; CHECK-NEXT: switch i32 [[A:%.*]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 97, label [[ONE:%.*]] +; CHECK-NEXT: i32 98, label [[TWO:%.*]] +; CHECK-NEXT: i32 99, label [[THREE:%.*]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 97, label %one - i32 98, label %two - i32 99, label %three + i32 97, label %one + i32 98, label %two + i32 99, label %three ] def: @@ -76,14 +116,29 @@ three: } ; Optimization shouldn't trigger; not an arithmetic progression -; CHECK-LABEL: @test4 -; CHECK: switch i32 %a, label %def define i32 @test4(i32 %a) { +; CHECK-LABEL: @test4( +; CHECK-NEXT: switch i32 [[A:%.*]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 97, label [[ONE:%.*]] +; CHECK-NEXT: i32 102, label [[TWO:%.*]] +; CHECK-NEXT: i32 105, label [[THREE:%.*]] +; CHECK-NEXT: i32 109, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 97, label %one - i32 102, label %two - i32 105, label %three - i32 109, label %three + i32 97, label %one + i32 102, label %two + i32 105, label %three + i32 109, label %three ] def: @@ -98,14 +153,29 @@ three: } ; Optimization shouldn't trigger; not a power of two -; CHECK-LABEL: @test5 -; CHECK: switch i32 %a, label %def define i32 @test5(i32 %a) { +; CHECK-LABEL: @test5( +; CHECK-NEXT: switch i32 [[A:%.*]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 97, label [[ONE:%.*]] +; CHECK-NEXT: i32 102, label [[TWO:%.*]] +; CHECK-NEXT: i32 107, label [[THREE:%.*]] +; CHECK-NEXT: i32 112, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 97, label %one - i32 102, label %two - i32 107, label %three - i32 112, label %three + i32 97, label %one + i32 102, label %two + i32 107, label %three + i32 112, label %three ] def: @@ -119,18 +189,33 @@ three: ret i32 99783 } -; CHECK-LABEL: @test6 -; CHECK: %[[SUB:.*]] = sub i32 %a, -109 -; CHECK: %[[LSHR:.*]] = lshr i32 %[[SUB]], 2 -; CHECK: %[[SHL:.*]] = shl i32 %[[SUB]], 30 -; CHECK: %[[OR:.*]] = or i32 %[[LSHR]], %[[SHL]] -; CHECK: switch i32 %[[OR]], label %def [ define i32 @test6(i32 %a) optsize { +; CHECK-LABEL: @test6( +; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[A:%.*]], -109 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 2 +; CHECK-NEXT: [[TMP3:%.*]] = shl i32 [[TMP1]], 30 +; CHECK-NEXT: [[TMP4:%.*]] = or i32 [[TMP2]], [[TMP3]] +; CHECK-NEXT: switch i32 [[TMP4]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 3, label [[ONE:%.*]] +; CHECK-NEXT: i32 2, label [[TWO:%.*]] +; CHECK-NEXT: i32 1, label [[THREE:%.*]] +; CHECK-NEXT: i32 0, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 -97, label %one - i32 -101, label %two - i32 -105, label %three - i32 -109, label %three + i32 -97, label %one + i32 -101, label %two + i32 -105, label %three + i32 -109, label %three ] def: @@ -144,18 +229,29 @@ three: ret i32 99783 } -; CHECK-LABEL: @test7 -; CHECK: %[[SUB:.*]] = sub i8 %a, -36 -; CHECK: %[[LSHR:.*]] = lshr i8 %[[SUB]], 2 -; CHECK: %[[SHL:.*]] = shl i8 %[[SUB]], 6 -; CHECK: %[[OR:.*]] = or i8 %[[LSHR]], %[[SHL]] -; CHECK: switch.tableidx = {{.*}} %[[OR]] define i8 @test7(i8 %a) optsize { +; CHECK-LABEL: @test7( +; CHECK-NEXT: [[TMP1:%.*]] = sub i8 [[A:%.*]], -36 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i8 [[TMP1]], 2 +; CHECK-NEXT: [[TMP3:%.*]] = shl i8 [[TMP1]], 6 +; CHECK-NEXT: [[TMP4:%.*]] = or i8 [[TMP2]], [[TMP3]] +; CHECK-NEXT: [[SWITCH_TABLEIDX:%.*]] = sub i8 [[TMP4]], 0 +; CHECK-NEXT: [[TMP5:%.*]] = icmp ult i8 [[SWITCH_TABLEIDX]], 4 +; CHECK-NEXT: br i1 [[TMP5]], label [[SWITCH_LOOKUP:%.*]], label [[DEF:%.*]] +; CHECK: switch.lookup: +; CHECK-NEXT: [[SWITCH_CAST:%.*]] = zext i8 [[SWITCH_TABLEIDX]] to i32 +; CHECK-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul i32 [[SWITCH_CAST]], 8 +; CHECK-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i32 -943228976, [[SWITCH_SHIFTAMT]] +; CHECK-NEXT: [[SWITCH_MASKED:%.*]] = trunc i32 [[SWITCH_DOWNSHIFT]] to i8 +; CHECK-NEXT: ret i8 [[SWITCH_MASKED]] +; CHECK: def: +; CHECK-NEXT: ret i8 -93 +; switch i8 %a, label %def [ - i8 220, label %one - i8 224, label %two - i8 228, label %three - i8 232, label %three + i8 220, label %one + i8 224, label %two + i8 228, label %three + i8 232, label %three ] def: @@ -169,18 +265,33 @@ three: ret i8 99783 } -; CHECK-LABEL: @test8 -; CHECK: %[[SUB:.*]] = sub i32 %a, 97 -; CHECK: %[[LSHR:.*]] = lshr i32 %1, 2 -; CHECK: %[[SHL:.*]] = shl i32 %1, 30 -; CHECK: %[[OR:.*]] = or i32 %[[LSHR]], %[[SHL]] -; CHECK: switch i32 %[[OR]], label %def [ define i32 @test8(i32 %a) optsize { +; CHECK-LABEL: @test8( +; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[A:%.*]], 97 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 2 +; CHECK-NEXT: [[TMP3:%.*]] = shl i32 [[TMP1]], 30 +; CHECK-NEXT: [[TMP4:%.*]] = or i32 [[TMP2]], [[TMP3]] +; CHECK-NEXT: switch i32 [[TMP4]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 0, label [[ONE:%.*]] +; CHECK-NEXT: i32 1, label [[TWO:%.*]] +; CHECK-NEXT: i32 2, label [[THREE:%.*]] +; CHECK-NEXT: i32 4, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 97, label %one - i32 101, label %two - i32 105, label %three - i32 113, label %three + i32 97, label %one + i32 101, label %two + i32 105, label %three + i32 113, label %three ] def: @@ -194,18 +305,33 @@ three: ret i32 99783 } -; CHECK-LABEL: @test9 -; CHECK: switch -; CHECK: i32 6 -; CHECK: i32 7 -; CHECK: i32 0 -; CHECK: i32 2 define i32 @test9(i32 %a) { +; CHECK-LABEL: @test9( +; CHECK-NEXT: [[TMP1:%.*]] = sub i32 [[A:%.*]], 6 +; CHECK-NEXT: [[TMP2:%.*]] = lshr i32 [[TMP1]], 1 +; CHECK-NEXT: [[TMP3:%.*]] = shl i32 [[TMP1]], 31 +; CHECK-NEXT: [[TMP4:%.*]] = or i32 [[TMP2]], [[TMP3]] +; CHECK-NEXT: switch i32 [[TMP4]], label [[DEF:%.*]] [ +; CHECK-NEXT: i32 6, label [[ONE:%.*]] +; CHECK-NEXT: i32 7, label [[TWO:%.*]] +; CHECK-NEXT: i32 0, label [[THREE:%.*]] +; CHECK-NEXT: i32 2, label [[THREE]] +; CHECK-NEXT: ] +; CHECK: def: +; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 8867, [[TMP0:%.*]] ], [ 11984, [[ONE]] ], [ 1143, [[TWO]] ], [ 99783, [[THREE]] ] +; CHECK-NEXT: ret i32 [[MERGE]] +; CHECK: one: +; CHECK-NEXT: br label [[DEF]] +; CHECK: two: +; CHECK-NEXT: br label [[DEF]] +; CHECK: three: +; CHECK-NEXT: br label [[DEF]] +; switch i32 %a, label %def [ - i32 18, label %one - i32 20, label %two - i32 6, label %three - i32 10, label %three + i32 18, label %one + i32 20, label %two + i32 6, label %three + i32 10, label %three ] def: