diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-10-22 22:16:46 +0300 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-10-22 22:54:57 +0300 |
commit | 9b1419a9e501389ec4b98553d9e00a8e327e43d0 (patch) | |
tree | 0b196d464aa4aa5305655c676584b995aff6849b | |
parent | f9b1dc5553c9d0f93eb94cc1437beb483a85098e (diff) | |
download | bcm5719-llvm-9b1419a9e501389ec4b98553d9e00a8e327e43d0.tar.gz bcm5719-llvm-9b1419a9e501389ec4b98553d9e00a8e327e43d0.zip |
[NFC][LVI][CVP] Tests where pre-specified `add` no-wrap flags could be used by LVI
There's `ConstantRange::addWithNoWrap()`, LVI could use it to further
constrain the range, if an `add` already has some no-wrap flags specified.
-rw-r--r-- | llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll b/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll index 7f28dadeaee..294862ae632 100644 --- a/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll +++ b/llvm/test/Transforms/CorrelatedValuePropagation/icmp.ll @@ -242,4 +242,140 @@ out: ret i1 %ret } +define i1 @test7(i32 %a, i32 %b) { +; CHECK-LABEL: @test7( +; CHECK-NEXT: begin: +; CHECK-NEXT: [[CMP0:%.*]] = icmp sge i32 [[A:%.*]], 0 +; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[B:%.*]], 0 +; CHECK-NEXT: [[BR:%.*]] = and i1 [[CMP0]], [[CMP1]] +; CHECK-NEXT: br i1 [[BR]], label [[BB:%.*]], label [[EXIT:%.*]] +; CHECK: bb: +; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], [[B]] +; CHECK-NEXT: br label [[CONT:%.*]] +; CHECK: cont: +; CHECK-NEXT: [[RES:%.*]] = icmp sge i32 [[ADD]], 0 +; CHECK-NEXT: br label [[EXIT]] +; CHECK: exit: +; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ] +; CHECK-NEXT: ret i1 [[IV]] +; +begin: + %cmp0 = icmp sge i32 %a, 0 + %cmp1 = icmp sge i32 %b, 0 + %br = and i1 %cmp0, %cmp1 + br i1 %br, label %bb, label %exit + +bb: + %add = add i32 %a, %b + br label %cont + +cont: + %res = icmp sge i32 %add, 0 + br label %exit + +exit: + %iv = phi i1 [ true, %begin ], [ %res, %cont ] + ret i1 %iv +} + +define i1 @test8(i32 %a, i32 %b) { +; CHECK-LABEL: @test8( +; CHECK-NEXT: begin: +; CHECK-NEXT: [[CMP0:%.*]] = icmp sge i32 [[A:%.*]], 0 +; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[B:%.*]], 0 +; CHECK-NEXT: [[BR:%.*]] = and i1 [[CMP0]], [[CMP1]] +; CHECK-NEXT: br i1 [[BR]], label [[BB:%.*]], label [[EXIT:%.*]] +; CHECK: bb: +; CHECK-NEXT: [[ADD:%.*]] = add nuw nsw i32 [[A]], [[B]] +; CHECK-NEXT: br label [[CONT:%.*]] +; CHECK: cont: +; CHECK-NEXT: [[RES:%.*]] = icmp sge i32 [[ADD]], 0 +; CHECK-NEXT: br label [[EXIT]] +; CHECK: exit: +; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ] +; CHECK-NEXT: ret i1 [[IV]] +; +begin: + %cmp0 = icmp sge i32 %a, 0 + %cmp1 = icmp sge i32 %b, 0 + %br = and i1 %cmp0, %cmp1 + br i1 %br, label %bb, label %exit + +bb: + %add = add nsw i32 %a, %b + br label %cont + +cont: + %res = icmp sge i32 %add, 0 + br label %exit + +exit: + %iv = phi i1 [ true, %begin ], [ %res, %cont ] + ret i1 %iv +} + +define i1 @test10(i32 %a, i32 %b) { +; CHECK-LABEL: @test10( +; CHECK-NEXT: begin: +; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[A:%.*]], -256 +; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]] +; CHECK: bb: +; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], [[B:%.*]] +; CHECK-NEXT: br label [[CONT:%.*]] +; CHECK: cont: +; CHECK-NEXT: [[RES:%.*]] = icmp uge i32 [[ADD]], -256 +; CHECK-NEXT: br label [[EXIT]] +; CHECK: exit: +; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ] +; CHECK-NEXT: ret i1 [[IV]] +; +begin: + %cmp = icmp uge i32 %a, 4294967040 + br i1 %cmp, label %bb, label %exit + +bb: + %add = add i32 %a, %b + br label %cont + +cont: + %res = icmp uge i32 %add, 4294967040 + br label %exit + +exit: + %iv = phi i1 [ true, %begin ], [ %res, %cont ] + ret i1 %iv +} + +define i1 @test11(i32 %a, i32 %b) { +; CHECK-LABEL: @test11( +; CHECK-NEXT: begin: +; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[A:%.*]], -256 +; CHECK-NEXT: br i1 [[CMP]], label [[BB:%.*]], label [[EXIT:%.*]] +; CHECK: bb: +; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], [[B:%.*]] +; CHECK-NEXT: br label [[CONT:%.*]] +; CHECK: cont: +; CHECK-NEXT: [[RES:%.*]] = icmp uge i32 [[ADD]], -256 +; CHECK-NEXT: br label [[EXIT]] +; CHECK: exit: +; CHECK-NEXT: [[IV:%.*]] = phi i1 [ true, [[BEGIN:%.*]] ], [ [[RES]], [[CONT]] ] +; CHECK-NEXT: ret i1 [[IV]] +; +begin: + %cmp = icmp uge i32 %a, 4294967040 + br i1 %cmp, label %bb, label %exit + +bb: + %add = add nuw i32 %a, %b + br label %cont + +cont: + %res = icmp uge i32 %add, 4294967040 + br label %exit + +exit: + %iv = phi i1 [ true, %begin ], [ %res, %cont ] + ret i1 %iv +} + attributes #4 = { noreturn } |