86 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=ipsccp -S %s | FileCheck %s3 4@y = common global [1 x i32] zeroinitializer, align 45@x = common global [1 x i32] zeroinitializer, align 46 7define i32 @eq_undereferenceable(ptr %p) {8; CHECK-LABEL: @eq_undereferenceable(9; CHECK-NEXT: entry:10; CHECK-NEXT: store i32 1, ptr @y, align 411; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P:%.*]], getelementptr inbounds (i32, ptr @x, i64 1)12; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]13; CHECK: if.then:14; CHECK-NEXT: store i32 2, ptr getelementptr inbounds (i32, ptr @x, i64 1), align 415; CHECK-NEXT: br label [[IF_END]]16; CHECK: if.end:17; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @y, align 418; CHECK-NEXT: ret i32 [[TMP0]]19;20entry:21 store i32 1, ptr @y, align 422 %cmp = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1)23 br i1 %cmp, label %if.then, label %if.end24 25if.then: ; preds = %entry26 store i32 2, ptr %p, align 427 br label %if.end28 29if.end: ; preds = %if.then, %entry30 %0 = load i32, ptr @y, align 431 ret i32 %032}33 34 35define i32 @eq_dereferenceable(ptr %p) {36; CHECK-LABEL: @eq_dereferenceable(37; CHECK-NEXT: entry:38; CHECK-NEXT: store i32 1, ptr @y, align 439; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P:%.*]], @x40; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]41; CHECK: if.then:42; CHECK-NEXT: store i32 2, ptr @x, align 443; CHECK-NEXT: br label [[IF_END]]44; CHECK: if.end:45; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr @y, align 446; CHECK-NEXT: ret i32 [[TMP0]]47;48entry:49 store i32 1, ptr @y, align 450 %cmp = icmp eq ptr %p, @x51 br i1 %cmp, label %if.then, label %if.end52 53if.then: ; preds = %entry54 store i32 2, ptr %p, align 455 br label %if.end56 57if.end: ; preds = %if.then, %entry58 %0 = load i32, ptr @y, align 459 ret i32 %060}61 62define i1 @eq_undereferenceable_cmp_simp(ptr %p) {63; CHECK-LABEL: @eq_undereferenceable_cmp_simp(64; CHECK-NEXT: entry:65; CHECK-NEXT: [[CMP_0:%.*]] = icmp eq ptr [[P:%.*]], getelementptr inbounds (i32, ptr @x, i64 1)66; CHECK-NEXT: br i1 [[CMP_0]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]67; CHECK: if.then:68; CHECK-NEXT: store i32 2, ptr getelementptr inbounds (i32, ptr @x, i64 1), align 469; CHECK-NEXT: ret i1 true70; CHECK: if.end:71; CHECK-NEXT: ret i1 false72;73entry:74 %cmp.0 = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1)75 br i1 %cmp.0, label %if.then, label %if.end76 77if.then: ; preds = %entry78 store i32 2, ptr %p, align 479 %cmp.1 = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1)80 ret i1 %cmp.181 82if.end: ; preds = %if.then, %entry83 %cmp.2 = icmp eq ptr %p, getelementptr inbounds (i32, ptr @x, i64 1)84 ret i1 %cmp.285}86