@@ -73,6 +73,45 @@ entry:
7373 ret void
7474}
7575
76+ define void @voltest (ptr addrspace (1 ) %base , ptr addrspace (1 ) %otherA , ptr addrspace (1 ) %otherB ) #0 {
77+ ; CHECK-LABEL: define void @voltest(
78+ ; CHECK-SAME: ptr addrspace(1) [[BASE:%.*]], ptr addrspace(1) [[OTHERA:%.*]], ptr addrspace(1) [[OTHERB:%.*]]) #[[ATTR0]] {
79+ ; CHECK-NEXT: [[ENTRY:.*:]]
80+ ; CHECK-NEXT: [[P0:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 0
81+ ; CHECK-NEXT: [[P1:%.*]] = getelementptr half, ptr addrspace(1) [[BASE]], i32 1
82+ ; CHECK-NEXT: [[A0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 0
83+ ; CHECK-NEXT: [[B0PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 0
84+ ; CHECK-NEXT: [[A0:%.*]] = load volatile half, ptr addrspace(1) [[A0PTR]], align 2, !invariant.load [[META0]]
85+ ; CHECK-NEXT: [[B0:%.*]] = load volatile half, ptr addrspace(1) [[B0PTR]], align 2, !invariant.load [[META0]]
86+ ; CHECK-NEXT: [[ADD0:%.*]] = fadd reassoc half [[A0]], [[B0]]
87+ ; CHECK-NEXT: store half [[ADD0]], ptr addrspace(1) [[P0]], align 2
88+ ; CHECK-NEXT: [[A1PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERA]], i32 1
89+ ; CHECK-NEXT: [[B1PTR:%.*]] = getelementptr half, ptr addrspace(1) [[OTHERB]], i32 1
90+ ; CHECK-NEXT: [[A1:%.*]] = load volatile half, ptr addrspace(1) [[A1PTR]], align 2, !invariant.load [[META0]]
91+ ; CHECK-NEXT: [[B1:%.*]] = load volatile half, ptr addrspace(1) [[B1PTR]], align 2, !invariant.load [[META0]]
92+ ; CHECK-NEXT: [[ADD1:%.*]] = fadd reassoc half [[A1]], [[B1]]
93+ ; CHECK-NEXT: store half [[ADD1]], ptr addrspace(1) [[P1]], align 2
94+ ; CHECK-NEXT: ret void
95+ ;
96+ entry:
97+ %p0 = getelementptr half , ptr addrspace (1 ) %base , i32 0
98+ %p1 = getelementptr half , ptr addrspace (1 ) %base , i32 1
99+ ; First pair of invariant loads from otherA.
100+ %A0PTR = getelementptr half , ptr addrspace (1 ) %otherA , i32 0
101+ %B0PTR = getelementptr half , ptr addrspace (1 ) %otherB , i32 0
102+ %A0 = load volatile half , ptr addrspace (1 ) %A0PTR , align 2 , !invariant.load !0
103+ %B0 = load volatile half , ptr addrspace (1 ) %B0PTR , align 2 , !invariant.load !0
104+ %add0 = fadd reassoc half %A0 , %B0
105+ store half %add0 , ptr addrspace (1 ) %p0 , align 2
106+ %A1PTR = getelementptr half , ptr addrspace (1 ) %otherA , i32 1
107+ %B1PTR = getelementptr half , ptr addrspace (1 ) %otherB , i32 1
108+ %A1 = load volatile half , ptr addrspace (1 ) %A1PTR , align 2 , !invariant.load !0
109+ %B1 = load volatile half , ptr addrspace (1 ) %B1PTR , align 2 , !invariant.load !0
110+ %add1 = fadd reassoc half %A1 , %B1
111+ store half %add1 , ptr addrspace (1 ) %p1 , align 2
112+ ret void
113+ }
114+
76115
77116attributes #0 = { nounwind }
78117
0 commit comments