blob: f1bda58d357b316bb2169f191232f0a60ac5636c [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -passes=gvn < %s | FileCheck %s
; https://github.com/llvm/llvm-project/issues/59679
; Make sure we don't replace the %ptr in the if.then branch with @x and then
; conclude that it can't alias with the read from the noalias pointer %ptr.
@x = global i32 0
define i32 @test(ptr noalias %ptr) {
; CHECK-LABEL: define i32 @test(
; CHECK-SAME: ptr noalias [[PTR:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: store i32 1, ptr [[PTR]], align 4
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[PTR]], @x
; CHECK-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
; CHECK: [[IF_THEN]]:
; CHECK-NEXT: store i32 2, ptr [[PTR]], align 4
; CHECK-NEXT: br label %[[IF_END]]
; CHECK: [[IF_END]]:
; CHECK-NEXT: [[V:%.*]] = phi i32 [ 2, %[[IF_THEN]] ], [ 1, %[[ENTRY]] ]
; CHECK-NEXT: ret i32 [[V]]
;
entry:
store i32 1, ptr %ptr
%cmp = icmp eq ptr %ptr, @x
br i1 %cmp, label %if.then, label %if.end
if.then:
store i32 2, ptr %ptr
br label %if.end
if.end:
%v = load i32, ptr %ptr
ret i32 %v
}