161 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2 3; The tests in this file check that we do not simplify based on metadata that is4; not available on all code paths.5 6; RUN: opt < %s -S -passes=newgvn | FileCheck %s7 8define i1 @test1(ptr %arg, i1 %arg2) {9; CHECK-LABEL: @test1(10; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]11; CHECK: bb1:12; CHECK-NEXT: [[LOAD1:%.*]] = load ptr, ptr [[ARG:%.*]], align 8, !nonnull [[META0:![0-9]+]]13; CHECK-NEXT: [[CMP1:%.*]] = icmp eq ptr [[LOAD1]], null14; CHECK-NEXT: ret i1 [[CMP1]]15; CHECK: bb2:16; CHECK-NEXT: [[LOAD2:%.*]] = load ptr, ptr [[ARG]], align 817; CHECK-NEXT: [[CMP2:%.*]] = icmp eq ptr [[LOAD2]], null18; CHECK-NEXT: ret i1 [[CMP2]]19;20 br i1 %arg2, label %bb1, label %bb221 22bb1:23 %load1 = load ptr, ptr %arg, !nonnull !024 %cmp1 = icmp eq ptr %load1, null25 ret i1 %cmp126 27bb2:28 %load2 = load ptr, ptr %arg29 %cmp2 = icmp eq ptr %load2, null30 ret i1 %cmp231}32 33define i1 @test2(ptr %arg, i1 %arg2) {34; CHECK-LABEL: @test2(35; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]36; CHECK: bb1:37; CHECK-NEXT: [[LOAD1:%.*]] = load ptr, ptr [[ARG:%.*]], align 838; CHECK-NEXT: [[CMP1:%.*]] = icmp eq ptr [[LOAD1]], null39; CHECK-NEXT: ret i1 [[CMP1]]40; CHECK: bb2:41; CHECK-NEXT: [[LOAD2:%.*]] = load ptr, ptr [[ARG]], align 8, !nonnull [[META0]]42; CHECK-NEXT: [[CMP2:%.*]] = icmp eq ptr [[LOAD2]], null43; CHECK-NEXT: ret i1 [[CMP2]]44;45 br i1 %arg2, label %bb1, label %bb246 47bb1:48 %load1 = load ptr, ptr %arg49 %cmp1 = icmp eq ptr %load1, null50 ret i1 %cmp151 52bb2:53 %load2 = load ptr, ptr %arg, !nonnull !054 %cmp2 = icmp eq ptr %load2, null55 ret i1 %cmp256}57 58 59define i1 @test3(ptr %ptr, i1 %arg2) {60; CHECK-LABEL: @test3(61; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]62; CHECK: bb1:63; CHECK-NEXT: [[LOAD1:%.*]] = load i32, ptr [[PTR:%.*]], align 4, !range [[RNG1:![0-9]+]]64; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[LOAD1]], 99965; CHECK-NEXT: ret i1 [[CMP1]]66; CHECK: bb2:67; CHECK-NEXT: [[LOAD2:%.*]] = load i32, ptr [[PTR]], align 468; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[LOAD2]], 99969; CHECK-NEXT: ret i1 [[CMP2]]70;71 br i1 %arg2, label %bb1, label %bb272 73bb1:74 %load1 = load i32, ptr %ptr, !range !175 %cmp1 = icmp ne i32 %load1, 99976 ret i1 %cmp177 78bb2:79 %load2 = load i32, ptr %ptr80 %cmp2 = icmp ne i32 %load2, 99981 ret i1 %cmp282}83 84define i1 @test4(ptr %ptr, i1 %arg2) {85; CHECK-LABEL: @test4(86; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]87; CHECK: bb1:88; CHECK-NEXT: [[LOAD1:%.*]] = load i32, ptr [[PTR:%.*]], align 489; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[LOAD1]], 99990; CHECK-NEXT: ret i1 [[CMP1]]91; CHECK: bb2:92; CHECK-NEXT: [[LOAD2:%.*]] = load i32, ptr [[PTR]], align 4, !range [[RNG1]]93; CHECK-NEXT: [[CMP2:%.*]] = icmp ne i32 [[LOAD2]], 99994; CHECK-NEXT: ret i1 [[CMP2]]95;96 br i1 %arg2, label %bb1, label %bb297 98bb1:99 %load1 = load i32, ptr %ptr100 %cmp1 = icmp ne i32 %load1, 999101 ret i1 %cmp1102 103bb2:104 %load2 = load i32, ptr %ptr, !range !1105 %cmp2 = icmp ne i32 %load2, 999106 ret i1 %cmp2107}108 109define i1 @test5(ptr %ptr, i1 %arg2) {110; CHECK-LABEL: @test5(111; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]112; CHECK: bb1:113; CHECK-NEXT: [[LOAD1:%.*]] = load i32, ptr [[PTR:%.*]], align 4, !range [[RNG1]]114; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[LOAD1]], 999115; CHECK-NEXT: ret i1 [[CMP1]]116; CHECK: bb2:117; CHECK-NEXT: [[LOAD2:%.*]] = load i32, ptr [[PTR]], align 4118; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[LOAD2]], 999119; CHECK-NEXT: ret i1 [[CMP2]]120;121 br i1 %arg2, label %bb1, label %bb2122 123bb1:124 %load1 = load i32, ptr %ptr, !range !1125 %cmp1 = icmp slt i32 %load1, 999126 ret i1 %cmp1127 128bb2:129 %load2 = load i32, ptr %ptr130 %cmp2 = icmp slt i32 %load2, 999131 ret i1 %cmp2132}133 134define i1 @test6(ptr %ptr, i1 %arg2) {135; CHECK-LABEL: @test6(136; CHECK-NEXT: br i1 [[ARG2:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]137; CHECK: bb1:138; CHECK-NEXT: [[LOAD1:%.*]] = load i32, ptr [[PTR:%.*]], align 4139; CHECK-NEXT: [[CMP1:%.*]] = icmp slt i32 [[LOAD1]], 999140; CHECK-NEXT: ret i1 [[CMP1]]141; CHECK: bb2:142; CHECK-NEXT: [[LOAD2:%.*]] = load i32, ptr [[PTR]], align 4, !range [[RNG1]]143; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[LOAD2]], 999144; CHECK-NEXT: ret i1 [[CMP2]]145;146 br i1 %arg2, label %bb1, label %bb2147 148bb1:149 %load1 = load i32, ptr %ptr150 %cmp1 = icmp slt i32 %load1, 999151 ret i1 %cmp1152 153bb2:154 %load2 = load i32, ptr %ptr, !range !1155 %cmp2 = icmp slt i32 %load2, 999156 ret i1 %cmp2157}158 159!0 = !{}160!1 = !{ i32 10, i32 20 }161