33
44@g = internal unnamed_addr addrspace (4 ) constant [3 x i8 ] c "12\00 " , align 16
55
6- define void @foo (i32 %a , i32 %b , ptr %p ) {
6+ define void @foo (i32 %a , i32 %b , ptr %p.0 , ptr %p.1 ) {
77; CHECK-LABEL: define void @foo(
8- ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], ptr nofree nonnull writeonly captures(none) dereferenceable(1) [[P :%.*]]) #[[ATTR0:[0-9]+]] {
8+ ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], ptr nofree nonnull writeonly captures(none) dereferenceable(1) [[P_0:%.*]], ptr nofree nonnull writeonly align 4 captures(none) dereferenceable(8) [[P_1 :%.*]]) #[[ATTR0:[0-9]+]] {
99; CHECK-NEXT: [[ENTRY:.*:]]
1010; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A]], [[B]]
1111; CHECK-NEXT: br i1 [[CMP]], label %[[L1:.*]], label %[[L2:.*]]
@@ -15,8 +15,10 @@ define void @foo(i32 %a, i32 %b, ptr %p) {
1515; CHECK-NEXT: br label %[[L3]]
1616; CHECK: [[L3]]:
1717; CHECK-NEXT: [[PHI:%.*]] = phi ptr addrspace(4) [ @g, %[[L1]] ], [ getelementptr inbounds nuw (i8, ptr addrspace(4) @g, i64 1), %[[L2]] ]
18- ; CHECK-NEXT: [[LOAD:%.*]] = load i8, ptr addrspace(4) [[PHI]], align 1
19- ; CHECK-NEXT: store i8 [[LOAD]], ptr [[P]], align 1
18+ ; CHECK-NEXT: [[LOAD_SMALL:%.*]] = load i8, ptr addrspace(4) [[PHI]], align 4
19+ ; CHECK-NEXT: store i8 [[LOAD_SMALL]], ptr [[P_0]], align 1
20+ ; CHECK-NEXT: [[LOAD_LARGE:%.*]] = load i64, ptr addrspace(4) [[PHI]], align 4
21+ ; CHECK-NEXT: store i64 [[LOAD_LARGE]], ptr [[P_1]], align 4
2022; CHECK-NEXT: ret void
2123;
2224entry:
2830 br label %l3
2931l3:
3032 %phi = phi ptr addrspace (4 ) [ @g , %l1 ], [ getelementptr inbounds nuw (i8 , ptr addrspace (4 ) @g , i64 1 ), %l2 ]
31- %load = load i8 , ptr addrspace (4 ) %phi
32- store i8 %load , ptr %p
33+ %load.small = load i8 , ptr addrspace (4 ) %phi
34+ store i8 %load.small , ptr %p.0
35+ %load.large = load i64 , ptr addrspace (4 ) %phi
36+ store i64 %load.large , ptr %p.1
3337 ret void
3438}
0 commit comments