diff options
Diffstat (limited to 'llvm/test/Transforms/NewGVN/metadata-simplify.ll')
-rw-r--r-- | llvm/test/Transforms/NewGVN/metadata-simplify.ll | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/llvm/test/Transforms/NewGVN/metadata-simplify.ll b/llvm/test/Transforms/NewGVN/metadata-simplify.ll new file mode 100644 index 00000000000..c9827bf26be --- /dev/null +++ b/llvm/test/Transforms/NewGVN/metadata-simplify.ll @@ -0,0 +1,160 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py + +; The tests in this file check that we do not simplify based on metadata that is +; not available on all code paths. + +; RUN: opt < %s -S -newgvn | FileCheck %s + +define i1 @test1(i32** %arg, i1 %arg2) { +; CHECK-LABEL: @test1( +; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: [[LOAD1:%.*]] = load i32*, i32** [[ARG:%.*]], !nonnull !0 +; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32* [[LOAD1]], null +; CHECK-NEXT: ret i1 [[CMP1]] +; CHECK: bb2: +; CHECK-NEXT: [[LOAD2:%.*]] = load i32*, i32** [[ARG]] +; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32* [[LOAD2]], null +; CHECK-NEXT: ret i1 [[CMP2]] +; + br i1 %arg2, label %bb1, label %bb2 + +bb1: + %load1 = load i32*, i32** %arg, !nonnull !0 + %cmp1 = icmp eq i32* %load1, null + ret i1 %cmp1 + +bb2: + %load2 = load i32*, i32** %arg + %cmp2 = icmp eq i32* %load2, null + ret i1 %cmp2 +} + +define i1 @test2(i32** %arg, i1 %arg2) { +; CHECK-LABEL: @test2( +; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: [[LOAD1:%.*]] = load i32*, i32** [[ARG:%.*]] +; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32* [[LOAD1]], null +; CHECK-NEXT: ret i1 [[CMP1]] +; CHECK: bb2: +; CHECK-NEXT: [[LOAD2:%.*]] = load i32*, i32** [[ARG]], !nonnull !0 +; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32* [[LOAD2]], null +; CHECK-NEXT: ret i1 [[CMP2]] +; + br i1 %arg2, label %bb1, label %bb2 + +bb1: + %load1 = load i32*, i32** %arg + %cmp1 = icmp eq i32* %load1, null + ret i1 %cmp1 + +bb2: + %load2 = load i32*, i32** %arg, !nonnull !0 + %cmp2 = icmp eq i32* %load2, null + ret i1 %cmp2 +} + + +define i1 @test3(i32* %ptr, i1 %arg2) { +; CHECK-LABEL: @test3( +; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: [[LOAD1:%.*]] = load i32, i32* [[PTR:%.*]], !range !1 +; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[LOAD1]], 999 +; CHECK-NEXT: ret i1 [[CMP1]] +; CHECK: bb2: +; CHECK-NEXT: [[LOAD2:%.*]] = load i32, i32* [[PTR]] +; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[LOAD2]], 999 +; CHECK-NEXT: ret i1 [[CMP2]] +; + br i1 %arg2, label %bb1, label %bb2 + +bb1: + %load1 = load i32, i32* %ptr, !range !1 + %cmp1 = icmp ne i32 %load1, 999 + ret i1 %cmp1 + +bb2: + %load2 = load i32, i32* %ptr + %cmp2 = icmp ne i32 %load2, 999 + ret i1 %cmp2 +} + +define i1 @test4(i32* %ptr, i1 %arg2) { +; CHECK-LABEL: @test4( +; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: [[LOAD1:%.*]] = load i32, i32* [[PTR:%.*]] +; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[LOAD1]], 999 +; CHECK-NEXT: ret i1 [[CMP1]] +; CHECK: bb2: +; CHECK-NEXT: [[LOAD2:%.*]] = load i32, i32* [[PTR]], !range !1 +; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[LOAD2]], 999 +; CHECK-NEXT: ret i1 [[CMP2]] +; + br i1 %arg2, label %bb1, label %bb2 + +bb1: + %load1 = load i32, i32* %ptr + %cmp1 = icmp ne i32 %load1, 999 + ret i1 %cmp1 + +bb2: + %load2 = load i32, i32* %ptr, !range !1 + %cmp2 = icmp ne i32 %load2, 999 + ret i1 %cmp2 +} + +define i1 @test5(i32* %ptr, i1 %arg2) { +; CHECK-LABEL: @test5( +; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: [[LOAD1:%.*]] = load i32, i32* [[PTR:%.*]], !range !1 +; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[LOAD1]], 999 +; CHECK-NEXT: ret i1 [[CMP1]] +; CHECK: bb2: +; CHECK-NEXT: [[LOAD2:%.*]] = load i32, i32* [[PTR]] +; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[LOAD2]], 999 +; CHECK-NEXT: ret i1 [[CMP2]] +; + br i1 %arg2, label %bb1, label %bb2 + +bb1: + %load1 = load i32, i32* %ptr, !range !1 + %cmp1 = icmp slt i32 %load1, 999 + ret i1 %cmp1 + +bb2: + %load2 = load i32, i32* %ptr + %cmp2 = icmp slt i32 %load2, 999 + ret i1 %cmp2 +} + +define i1 @test6(i32* %ptr, i1 %arg2) { +; CHECK-LABEL: @test6( +; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]] +; CHECK: bb1: +; CHECK-NEXT: [[LOAD1:%.*]] = load i32, i32* [[PTR:%.*]] +; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[LOAD1]], 999 +; CHECK-NEXT: ret i1 [[CMP1]] +; CHECK: bb2: +; CHECK-NEXT: [[LOAD2:%.*]] = load i32, i32* [[PTR]], !range !1 +; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[LOAD2]], 999 +; CHECK-NEXT: ret i1 [[CMP2]] +; + br i1 %arg2, label %bb1, label %bb2 + +bb1: + %load1 = load i32, i32* %ptr + %cmp1 = icmp slt i32 %load1, 999 + ret i1 %cmp1 + +bb2: + %load2 = load i32, i32* %ptr, !range !1 + %cmp2 = icmp slt i32 %load2, 999 + ret i1 %cmp2 +} + +!0 = !{} +!1 = !{ i32 10, i32 20 } |