@@ -9,11 +9,9 @@ void increment(inout int Arr[2]) {
9
9
// CHECK-LABEL: arrayCall
10
10
// CHECK: [[A:%.*]] = alloca [2 x i32], align 4
11
11
// CHECK-NEXT: [[Tmp:%.*]] = alloca [2 x i32], align 4
12
- // CHECK-NEXT: [[Tmp2:%.*]] = alloca [2 x i32], align 4
13
12
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 @{{.*}}, i32 8, i1 false)
14
13
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[A]], i32 8, i1 false)
15
- // CHECK-NEXT: store ptr [[Tmp]], ptr [[Tmp2]], align 4
16
- // CHECK-NEXT: call void @{{.*}}increment{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp2]]) #3
14
+ // CHECK-NEXT: call void @{{.*}}increment{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp]]) #3
17
15
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 [[Tmp]], i32 8, i1 false)
18
16
// CHECK-NEXT: [[Idx:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i32 0, i32 0
19
17
// CHECK-NEXT: [[B:%.*]] = load i32, ptr [[Idx]], align 4
@@ -33,10 +31,8 @@ void fn2(out int Arr[2]) {
33
31
// CHECK-LABEL: arrayCall2
34
32
// CHECK: [[A:%.*]] = alloca [2 x i32], align 4
35
33
// CHECK-NEXT: [[Tmp:%.*]] = alloca [2 x i32], align 4
36
- // CHECK-NEXT: [[Tmp2:%.*]] = alloca [2 x i32], align 4
37
34
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 @{{.*}}, i32 8, i1 false)
38
- // CHECK-NEXT: store ptr [[Tmp]], ptr [[Tmp2]], align 4
39
- // CHECK-NEXT: call void @{{.*}}fn2{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp2]]) #3
35
+ // CHECK-NEXT: call void @{{.*}}fn2{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp]]) #3
40
36
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 [[Tmp]], i32 8, i1 false)
41
37
// CHECK-NEXT: [[Idx:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i32 0, i32 0
42
38
// CHECK-NEXT: [[B:%.*]] = load i32, ptr [[Idx]], align 4
@@ -58,11 +54,9 @@ void nestedCall(inout int Arr[2], uint index) {
58
54
// CHECK-LABEL: arrayCall3
59
55
// CHECK: [[A:%.*]] = alloca [2 x i32], align 4
60
56
// CHECK-NEXT: [[Tmp:%.*]] = alloca [2 x i32], align 4
61
- // CHECK-NEXT: [[Tmp2:%.*]] = alloca [2 x i32], align 4
62
57
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 @{{.*}}, i32 8, i1 false)
63
58
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[A]], i32 8, i1 false)
64
- // CHECK-NEXT: store ptr [[Tmp]], ptr [[Tmp2]], align 4
65
- // CHECK-NEXT: call void @{{.*}}nestedCall{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp2]], i32 noundef 0) #3
59
+ // CHECK-NEXT: call void @{{.*}}nestedCall{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp]], i32 noundef 0) #3
66
60
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 [[Tmp]], i32 8, i1 false)
67
61
// CHECK-NEXT: [[Idx:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i32 0, i32 1
68
62
// CHECK-NEXT: [[B:%.*]] = load i32, ptr [[Idx]], align 4
@@ -75,10 +69,8 @@ export int arrayCall3() {
75
69
76
70
// CHECK-LABEL: outerCall
77
71
// CHECK: [[Tmp:%.*]] = alloca [2 x i32], align 4
78
- // CHECK-NEXT: [[Tmp2:%.*]] = alloca [2 x i32], align 4
79
72
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 %{{.*}}, i32 8, i1 false)
80
- // CHECK-NEXT: store ptr [[Tmp]], ptr [[Tmp2]], align 4
81
- // CHECK-NEXT: call void {{.*}}increment{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp2]]) #3
73
+ // CHECK-NEXT: call void {{.*}}increment{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp]]) #3
82
74
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 {{.*}}, ptr align 4 [[Tmp]], i32 8, i1 false)
83
75
// CHECK-NEXT: ret void
84
76
void outerCall (inout int Arr[2 ]) {
@@ -88,11 +80,9 @@ void outerCall(inout int Arr[2]) {
88
80
// CHECK-LABEL: arrayCall4
89
81
// CHECK: [[A:%.*]] = alloca [2 x i32], align 4
90
82
// CHECK-NEXT: [[Tmp:%.*]] = alloca [2 x i32], align 4
91
- // CHECK-NEXT: [[Tmp2:%.*]] = alloca [2 x i32], align 4
92
83
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 @{{.*}}, i32 8, i1 false)
93
84
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[A]], i32 8, i1 false)
94
- // CHECK-NEXT: store ptr [[Tmp]], ptr [[Tmp2]], align 4
95
- // CHECK-NEXT: call void @{{.*}}outerCall{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp2]]) #3
85
+ // CHECK-NEXT: call void @{{.*}}outerCall{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp]]) #3
96
86
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 [[Tmp]], i32 8, i1 false)
97
87
// CHECK-NEXT: [[Idx:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i32 0, i32 0
98
88
// CHECK-NEXT: [[B:%.*]] = load i32, ptr [[Idx]], align 4
@@ -118,11 +108,9 @@ void outerCall2(inout int Arr[2]) {
118
108
// CHECK-LABEL: arrayCall5
119
109
// CHECK: [[A:%.*]] = alloca [2 x i32], align 4
120
110
// CHECK-NEXT: [[Tmp:%.*]] = alloca [2 x i32], align 4
121
- // CHECK-NEXT: [[Tmp2:%.*]] = alloca [2 x i32], align 4
122
111
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 @{{.*}}, i32 8, i1 false)
123
112
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[Tmp]], ptr align 4 [[A]], i32 8, i1 false)
124
- // CHECK-NEXT: store ptr [[Tmp]], ptr [[Tmp2]], align 4
125
- // CHECK-NEXT: call void @{{.*}}outerCall2{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp2]]) #3
113
+ // CHECK-NEXT: call void @{{.*}}outerCall2{{.*}}(ptr noalias noundef byval([2 x i32]) align 4 [[Tmp]]) #3
126
114
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 4 [[A]], ptr align 4 [[Tmp]], i32 8, i1 false)
127
115
// CHECK-NEXT: [[Idx:%.*]] = getelementptr inbounds [2 x i32], ptr [[A]], i32 0, i32 0
128
116
// CHECK-NEXT: [[B:%.*]] = load i32, ptr [[Idx]], align 4
0 commit comments