@@ -20,8 +20,8 @@ define void @struct_return_widen(ptr noalias %in, ptr noalias writeonly %out_a,
20
20
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
21
21
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds half, ptr [[IN]], i64 [[INDEX]]
22
22
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP0]], i64 4
23
- ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x half>, ptr [[TMP0]], align 4
24
- ; CHECK-NEXT: [[WIDE_LOAD1:%.*]] = load <2 x half>, ptr [[TMP1]], align 4
23
+ ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x half>, ptr [[TMP0]], align 2
24
+ ; CHECK-NEXT: [[WIDE_LOAD1:%.*]] = load <2 x half>, ptr [[TMP1]], align 2
25
25
; CHECK-NEXT: [[TMP2:%.*]] = call { <2 x half>, <2 x half> } @fixed_vec_foo(<2 x half> [[WIDE_LOAD]])
26
26
; CHECK-NEXT: [[TMP3:%.*]] = call { <2 x half>, <2 x half> } @fixed_vec_foo(<2 x half> [[WIDE_LOAD1]])
27
27
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { <2 x half>, <2 x half> } [[TMP2]], 0
@@ -30,12 +30,12 @@ define void @struct_return_widen(ptr noalias %in, ptr noalias writeonly %out_a,
30
30
; CHECK-NEXT: [[TMP7:%.*]] = extractvalue { <2 x half>, <2 x half> } [[TMP3]], 1
31
31
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds half, ptr [[OUT_A]], i64 [[INDEX]]
32
32
; CHECK-NEXT: [[TMP9:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP8]], i64 4
33
- ; CHECK-NEXT: store <2 x half> [[TMP4]], ptr [[TMP8]], align 4
34
- ; CHECK-NEXT: store <2 x half> [[TMP5]], ptr [[TMP9]], align 4
33
+ ; CHECK-NEXT: store <2 x half> [[TMP4]], ptr [[TMP8]], align 2
34
+ ; CHECK-NEXT: store <2 x half> [[TMP5]], ptr [[TMP9]], align 2
35
35
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds half, ptr [[OUT_B]], i64 [[INDEX]]
36
36
; CHECK-NEXT: [[TMP11:%.*]] = getelementptr inbounds nuw i8, ptr [[TMP10]], i64 4
37
- ; CHECK-NEXT: store <2 x half> [[TMP6]], ptr [[TMP10]], align 4
38
- ; CHECK-NEXT: store <2 x half> [[TMP7]], ptr [[TMP11]], align 4
37
+ ; CHECK-NEXT: store <2 x half> [[TMP6]], ptr [[TMP10]], align 2
38
+ ; CHECK-NEXT: store <2 x half> [[TMP7]], ptr [[TMP11]], align 2
39
39
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
40
40
; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
41
41
; CHECK-NEXT: br i1 [[TMP12]], label %[[EXIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
@@ -48,14 +48,14 @@ entry:
48
48
for.body:
49
49
%iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.body ]
50
50
%arrayidx = getelementptr inbounds half , ptr %in , i64 %iv
51
- %in_val = load half , ptr %arrayidx , align 4
51
+ %in_val = load half , ptr %arrayidx , align 2
52
52
%call = tail call { half , half } @foo (half %in_val ) #0
53
53
%extract_a = extractvalue { half , half } %call , 0
54
54
%extract_b = extractvalue { half , half } %call , 1
55
55
%arrayidx2 = getelementptr inbounds half , ptr %out_a , i64 %iv
56
- store half %extract_a , ptr %arrayidx2 , align 4
56
+ store half %extract_a , ptr %arrayidx2 , align 2
57
57
%arrayidx4 = getelementptr inbounds half , ptr %out_b , i64 %iv
58
- store half %extract_b , ptr %arrayidx4 , align 4
58
+ store half %extract_b , ptr %arrayidx4 , align 2
59
59
%iv.next = add nuw nsw i64 %iv , 1
60
60
%exitcond.not = icmp eq i64 %iv.next , 1024
61
61
br i1 %exitcond.not , label %exit , label %for.body
@@ -78,7 +78,7 @@ define void @struct_return_replicate(ptr noalias %in, ptr noalias writeonly %out
78
78
; CHECK: [[VECTOR_BODY]]:
79
79
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
80
80
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds half, ptr [[IN]], i64 [[INDEX]]
81
- ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x half>, ptr [[TMP0]], align 4
81
+ ; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x half>, ptr [[TMP0]], align 2
82
82
; CHECK-NEXT: [[TMP1:%.*]] = extractelement <2 x half> [[WIDE_LOAD]], i64 0
83
83
; CHECK-NEXT: [[TMP2:%.*]] = tail call { half, half } @foo(half [[TMP1]]) #[[ATTR0:[0-9]+]]
84
84
; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x half> [[WIDE_LOAD]], i64 1
@@ -92,9 +92,9 @@ define void @struct_return_replicate(ptr noalias %in, ptr noalias writeonly %out
92
92
; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { half, half } [[TMP4]], 1
93
93
; CHECK-NEXT: [[TMP12:%.*]] = insertelement <2 x half> [[TMP8]], half [[TMP11]], i64 1
94
94
; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds half, ptr [[OUT_A]], i64 [[INDEX]]
95
- ; CHECK-NEXT: store <2 x half> [[TMP10]], ptr [[TMP13]], align 4
95
+ ; CHECK-NEXT: store <2 x half> [[TMP10]], ptr [[TMP13]], align 2
96
96
; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds half, ptr [[OUT_B]], i64 [[INDEX]]
97
- ; CHECK-NEXT: store <2 x half> [[TMP12]], ptr [[TMP14]], align 4
97
+ ; CHECK-NEXT: store <2 x half> [[TMP12]], ptr [[TMP14]], align 2
98
98
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2
99
99
; CHECK-NEXT: [[TMP15:%.*]] = icmp eq i64 [[INDEX_NEXT]], 1024
100
100
; CHECK-NEXT: br i1 [[TMP15]], label %[[EXIT:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP3:![0-9]+]]
@@ -107,15 +107,15 @@ entry:
107
107
for.body:
108
108
%iv = phi i64 [ 0 , %entry ], [ %iv.next , %for.body ]
109
109
%arrayidx = getelementptr inbounds half , ptr %in , i64 %iv
110
- %in_val = load half , ptr %arrayidx , align 4
110
+ %in_val = load half , ptr %arrayidx , align 2
111
111
; #3 does not have a fixed-size vector mapping (so replication is used)
112
112
%call = tail call { half , half } @foo (half %in_val ) #1
113
113
%extract_a = extractvalue { half , half } %call , 0
114
114
%extract_b = extractvalue { half , half } %call , 1
115
115
%arrayidx2 = getelementptr inbounds half , ptr %out_a , i64 %iv
116
- store half %extract_a , ptr %arrayidx2 , align 4
116
+ store half %extract_a , ptr %arrayidx2 , align 2
117
117
%arrayidx4 = getelementptr inbounds half , ptr %out_b , i64 %iv
118
- store half %extract_b , ptr %arrayidx4 , align 4
118
+ store half %extract_b , ptr %arrayidx4 , align 2
119
119
%iv.next = add nuw nsw i64 %iv , 1
120
120
%exitcond.not = icmp eq i64 %iv.next , 1024
121
121
br i1 %exitcond.not , label %exit , label %for.body
0 commit comments