1ce654f4bSFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 28ebb3eacSBjorn Pettersson; RUN: opt -passes=ipsccp -S %s | FileCheck %s 3ce654f4bSFlorian Hahn 4ce654f4bSFlorian Hahn@y = common global [1 x i32] zeroinitializer, align 4 5ce654f4bSFlorian Hahn@x = common global [1 x i32] zeroinitializer, align 4 6ce654f4bSFlorian Hahn 7*0991da36SNikita Popovdefine i32 @eq_undereferenceable(ptr %p) { 8ce654f4bSFlorian Hahn; CHECK-LABEL: @eq_undereferenceable( 9ce654f4bSFlorian Hahn; CHECK-NEXT: entry: 10*0991da36SNikita Popov; CHECK-NEXT: store i32 1, ptr @y, align 4 11*0991da36SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P:%.*]], getelementptr inbounds (i32, ptr @x, i64 1) 12ce654f4bSFlorian Hahn; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 13ce654f4bSFlorian Hahn; CHECK: if.then: 14*0991da36SNikita Popov; CHECK-NEXT: store i32 2, ptr getelementptr inbounds (i32, ptr @x, i64 1), align 4 15ce654f4bSFlorian Hahn; CHECK-NEXT: br label [[IF_END]] 16ce654f4bSFlorian Hahn; CHECK: if.end: 17*0991da36SNikita Popov; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @y, align 4 18ce654f4bSFlorian Hahn; CHECK-NEXT: ret i32 [[TMP0]] 19ce654f4bSFlorian Hahn; 20ce654f4bSFlorian Hahnentry: 21*0991da36SNikita Popov store i32 1, ptr @y, align 4 22*0991da36SNikita Popov %cmp = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1) 23ce654f4bSFlorian Hahn br i1 %cmp, label %if.then, label %if.end 24ce654f4bSFlorian Hahn 25ce654f4bSFlorian Hahnif.then: ; preds = %entry 26*0991da36SNikita Popov store i32 2, ptr %p, align 4 27ce654f4bSFlorian Hahn br label %if.end 28ce654f4bSFlorian Hahn 29ce654f4bSFlorian Hahnif.end: ; preds = %if.then, %entry 30*0991da36SNikita Popov %0 = load i32, ptr @y, align 4 31ce654f4bSFlorian Hahn ret i32 %0 32ce654f4bSFlorian Hahn} 33ce654f4bSFlorian Hahn 34ce654f4bSFlorian Hahn 35*0991da36SNikita Popovdefine i32 @eq_dereferenceable(ptr %p) { 36ce654f4bSFlorian Hahn; CHECK-LABEL: @eq_dereferenceable( 37ce654f4bSFlorian Hahn; CHECK-NEXT: entry: 38*0991da36SNikita Popov; CHECK-NEXT: store i32 1, ptr @y, align 4 39*0991da36SNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P:%.*]], @x 40ce654f4bSFlorian Hahn; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 41ce654f4bSFlorian Hahn; CHECK: if.then: 42*0991da36SNikita Popov; CHECK-NEXT: store i32 2, ptr @x, align 4 43ce654f4bSFlorian Hahn; CHECK-NEXT: br label [[IF_END]] 44ce654f4bSFlorian Hahn; CHECK: if.end: 45*0991da36SNikita Popov; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @y, align 4 46ce654f4bSFlorian Hahn; CHECK-NEXT: ret i32 [[TMP0]] 47ce654f4bSFlorian Hahn; 48ce654f4bSFlorian Hahnentry: 49*0991da36SNikita Popov store i32 1, ptr @y, align 4 50*0991da36SNikita Popov %cmp = icmp eq ptr %p, @x 51ce654f4bSFlorian Hahn br i1 %cmp, label %if.then, label %if.end 52ce654f4bSFlorian Hahn 53ce654f4bSFlorian Hahnif.then: ; preds = %entry 54*0991da36SNikita Popov store i32 2, ptr %p, align 4 55ce654f4bSFlorian Hahn br label %if.end 56ce654f4bSFlorian Hahn 57ce654f4bSFlorian Hahnif.end: ; preds = %if.then, %entry 58*0991da36SNikita Popov %0 = load i32, ptr @y, align 4 59ce654f4bSFlorian Hahn ret i32 %0 60ce654f4bSFlorian Hahn} 61ce654f4bSFlorian Hahn 62*0991da36SNikita Popovdefine i1 @eq_undereferenceable_cmp_simp(ptr %p) { 63ce654f4bSFlorian Hahn; CHECK-LABEL: @eq_undereferenceable_cmp_simp( 64ce654f4bSFlorian Hahn; CHECK-NEXT: entry: 65*0991da36SNikita Popov; CHECK-NEXT: [[CMP_0:%.*]] = icmp eq ptr [[P:%.*]], getelementptr inbounds (i32, ptr @x, i64 1) 66ce654f4bSFlorian Hahn; CHECK-NEXT: br i1 [[CMP_0]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 67ce654f4bSFlorian Hahn; CHECK: if.then: 68*0991da36SNikita Popov; CHECK-NEXT: store i32 2, ptr getelementptr inbounds (i32, ptr @x, i64 1), align 4 69ce654f4bSFlorian Hahn; CHECK-NEXT: ret i1 true 70ce654f4bSFlorian Hahn; CHECK: if.end: 717fa97b47SNikita Popov; CHECK-NEXT: ret i1 false 72ce654f4bSFlorian Hahn; 73ce654f4bSFlorian Hahnentry: 74*0991da36SNikita Popov %cmp.0 = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1) 75ce654f4bSFlorian Hahn br i1 %cmp.0, label %if.then, label %if.end 76ce654f4bSFlorian Hahn 77ce654f4bSFlorian Hahnif.then: ; preds = %entry 78*0991da36SNikita Popov store i32 2, ptr %p, align 4 79*0991da36SNikita Popov %cmp.1 = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1) 80ce654f4bSFlorian Hahn ret i1 %cmp.1 81ce654f4bSFlorian Hahn 82ce654f4bSFlorian Hahnif.end: ; preds = %if.then, %entry 83*0991da36SNikita Popov %cmp.2 = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1) 84ce654f4bSFlorian Hahn ret i1 %cmp.2 85ce654f4bSFlorian Hahn} 86