1 ; RUN: opt < %s -gvn -enable-load-pre -S | FileCheck %s
3 define i32 @test1(i32* %p, i1 %C) {
6 br i1 %C, label %block2, label %block3
11 ; CHECK-NEXT: load i32* %p
25 ; This is a simple phi translation case.
26 define i32 @test2(i32* %p, i32* %q, i1 %C) {
29 br i1 %C, label %block2, label %block3
34 ; CHECK-NEXT: load i32* %q
41 %P2 = phi i32* [%p, %block3], [%q, %block2]
45 ; CHECK-NEXT: phi i32 [
50 ; This is a PRE case that requires phi translation through a GEP.
51 define i32 @test3(i32* %p, i32* %q, i32** %Hack, i1 %C) {
54 %B = getelementptr i32* %q, i32 1
55 store i32* %B, i32** %Hack
56 br i1 %C, label %block2, label %block3
61 ; CHECK-NEXT: load i32* %B
64 %A = getelementptr i32* %p, i32 1
69 %P2 = phi i32* [%p, %block3], [%q, %block2]
70 %P3 = getelementptr i32* %P2, i32 1
74 ; CHECK-NEXT: phi i32 [
79 ;; Here the loaded address is available, but the computation is in 'block3'
80 ;; which does not dominate 'block2'.
81 define i32 @test4(i32* %p, i32* %q, i32** %Hack, i1 %C) {
84 br i1 %C, label %block2, label %block3
90 ; CHECK: br label %block4
93 %B = getelementptr i32* %q, i32 1
94 store i32* %B, i32** %Hack
96 %A = getelementptr i32* %p, i32 1
101 %P2 = phi i32* [%p, %block3], [%q, %block2]
102 %P3 = getelementptr i32* %P2, i32 1
106 ; CHECK-NEXT: phi i32 [