1
1
// RUN: %clang_cc1 -faltivec -triple powerpc64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
2
- // REQUIRES: asserts
3
2
4
3
#include <stdarg.h>
5
4
@@ -32,10 +31,10 @@ void test4 (int x, struct test4 y)
32
31
}
33
32
34
33
// CHECK: define void @test1va(%struct.test1* noalias sret %agg.result, i32 signext %x, ...)
35
- // CHECK: %ap.cur = load i8** %ap
36
- // CHECK: %ap.next = getelementptr i8* %ap.cur , i64 8
37
- // CHECK: store i8* %ap.next , i8** %ap
38
- // CHECK: bitcast i8* %ap.cur to %struct.test1*
34
+ // CHECK: %[[CUR:[^ ]+]] = load i8** %ap
35
+ // CHECK: %[[NEXT:[^ ]+]] = getelementptr i8* %[[CUR]] , i64 8
36
+ // CHECK: store i8* %[[NEXT]] , i8** %ap
37
+ // CHECK: bitcast i8* %[[CUR]] to %struct.test1*
39
38
struct test1 test1va (int x , ...)
40
39
{
41
40
struct test1 y ;
@@ -47,14 +46,14 @@ struct test1 test1va (int x, ...)
47
46
}
48
47
49
48
// CHECK: define void @test2va(%struct.test2* noalias sret %agg.result, i32 signext %x, ...)
50
- // CHECK: %ap.cur = load i8** %ap
51
- // CHECK: %[[TMP0:[0-9 ]+]] = ptrtoint i8* %ap.cur to i64
52
- // CHECK: %[[TMP1:[0-9 ]+]] = add i64 %[[TMP0]], 15
53
- // CHECK: %[[TMP2:[0-9 ]+]] = and i64 %[[TMP1]], -16
54
- // CHECK: %ap.align = inttoptr i64 %[[TMP2]] to i8*
55
- // CHECK: %ap.next = getelementptr i8* %ap.align , i64 16
56
- // CHECK: store i8* %ap.next , i8** %ap
57
- // CHECK: bitcast i8* %ap.align to %struct.test2*
49
+ // CHECK: %[[CUR:[^ ]+]] = load i8** %ap
50
+ // CHECK: %[[TMP0:[^ ]+]] = ptrtoint i8* %[[CUR]] to i64
51
+ // CHECK: %[[TMP1:[^ ]+]] = add i64 %[[TMP0]], 15
52
+ // CHECK: %[[TMP2:[^ ]+]] = and i64 %[[TMP1]], -16
53
+ // CHECK: %[[ALIGN:[^ ]+]] = inttoptr i64 %[[TMP2]] to i8*
54
+ // CHECK: %[[NEXT:[^ ]+]] = getelementptr i8* %[[ALIGN]] , i64 16
55
+ // CHECK: store i8* %[[NEXT]] , i8** %ap
56
+ // CHECK: bitcast i8* %[[ALIGN]] to %struct.test2*
58
57
struct test2 test2va (int x , ...)
59
58
{
60
59
struct test2 y ;
@@ -66,14 +65,14 @@ struct test2 test2va (int x, ...)
66
65
}
67
66
68
67
// CHECK: define void @test3va(%struct.test3* noalias sret %agg.result, i32 signext %x, ...)
69
- // CHECK: %ap.cur = load i8** %ap
70
- // CHECK: %[[TMP0:[0-9 ]+]] = ptrtoint i8* %ap.cur to i64
71
- // CHECK: %[[TMP1:[0-9 ]+]] = add i64 %[[TMP0]], 15
72
- // CHECK: %[[TMP2:[0-9 ]+]] = and i64 %[[TMP1]], -16
73
- // CHECK: %ap.align = inttoptr i64 %[[TMP2]] to i8*
74
- // CHECK: %ap.next = getelementptr i8* %ap.align , i64 32
75
- // CHECK: store i8* %ap.next , i8** %ap
76
- // CHECK: bitcast i8* %ap.align to %struct.test3*
68
+ // CHECK: %[[CUR:[^ ]+]] = load i8** %ap
69
+ // CHECK: %[[TMP0:[^ ]+]] = ptrtoint i8* %[[CUR]] to i64
70
+ // CHECK: %[[TMP1:[^ ]+]] = add i64 %[[TMP0]], 15
71
+ // CHECK: %[[TMP2:[^ ]+]] = and i64 %[[TMP1]], -16
72
+ // CHECK: %[[ALIGN:[^ ]+]] = inttoptr i64 %[[TMP2]] to i8*
73
+ // CHECK: %[[NEXT:[^ ]+]] = getelementptr i8* %[[ALIGN]] , i64 32
74
+ // CHECK: store i8* %[[NEXT]] , i8** %ap
75
+ // CHECK: bitcast i8* %[[ALIGN]] to %struct.test3*
77
76
struct test3 test3va (int x , ...)
78
77
{
79
78
struct test3 y ;
@@ -85,10 +84,10 @@ struct test3 test3va (int x, ...)
85
84
}
86
85
87
86
// CHECK: define void @test4va(%struct.test4* noalias sret %agg.result, i32 signext %x, ...)
88
- // CHECK: %ap.cur = load i8** %ap
89
- // CHECK: %ap.next = getelementptr i8* %ap.cur , i64 16
90
- // CHECK: store i8* %ap.next , i8** %ap
91
- // CHECK: bitcast i8* %ap.cur to %struct.test4*
87
+ // CHECK: %[[CUR:[^ ]+]] = load i8** %ap
88
+ // CHECK: %[[NEXT:[^ ]+]] = getelementptr i8* %[[CUR]] , i64 16
89
+ // CHECK: store i8* %[[NEXT]] , i8** %ap
90
+ // CHECK: bitcast i8* %[[CUR]] to %struct.test4*
92
91
struct test4 test4va (int x , ...)
93
92
{
94
93
struct test4 y ;
@@ -100,10 +99,10 @@ struct test4 test4va (int x, ...)
100
99
}
101
100
102
101
// CHECK: define void @testva_longdouble(%struct.test_longdouble* noalias sret %agg.result, i32 signext %x, ...)
103
- // CHECK: %ap.cur = load i8** %ap
104
- // CHECK: %ap.next = getelementptr i8* %ap.cur , i64 16
105
- // CHECK: store i8* %ap.next , i8** %ap
106
- // CHECK: bitcast i8* %ap.cur to %struct.test_longdouble*
102
+ // CHECK: %[[CUR:[^ ]+]] = load i8** %ap
103
+ // CHECK: %[[NEXT:[^ ]+]] = getelementptr i8* %[[CUR]] , i64 16
104
+ // CHECK: store i8* %[[NEXT]] , i8** %ap
105
+ // CHECK: bitcast i8* %[[CUR]] to %struct.test_longdouble*
107
106
struct test_longdouble { long double x ; };
108
107
struct test_longdouble testva_longdouble (int x , ...)
109
108
{
@@ -116,14 +115,14 @@ struct test_longdouble testva_longdouble (int x, ...)
116
115
}
117
116
118
117
// CHECK: define void @testva_vector(%struct.test_vector* noalias sret %agg.result, i32 signext %x, ...)
119
- // CHECK: %ap.cur = load i8** %ap
120
- // CHECK: %[[TMP0:[0-9 ]+]] = ptrtoint i8* %ap.cur to i64
121
- // CHECK: %[[TMP1:[0-9 ]+]] = add i64 %[[TMP0]], 15
122
- // CHECK: %[[TMP2:[0-9 ]+]] = and i64 %[[TMP1]], -16
123
- // CHECK: %ap.align = inttoptr i64 %[[TMP2]] to i8*
124
- // CHECK: %ap.next = getelementptr i8* %ap.align , i64 16
125
- // CHECK: store i8* %ap.next , i8** %ap
126
- // CHECK: bitcast i8* %ap.align to %struct.test_vector*
118
+ // CHECK: %[[CUR:[^ ]+]] = load i8** %ap
119
+ // CHECK: %[[TMP0:[^ ]+]] = ptrtoint i8* %[[CUR]] to i64
120
+ // CHECK: %[[TMP1:[^ ]+]] = add i64 %[[TMP0]], 15
121
+ // CHECK: %[[TMP2:[^ ]+]] = and i64 %[[TMP1]], -16
122
+ // CHECK: %[[ALIGN:[^ ]+]] = inttoptr i64 %[[TMP2]] to i8*
123
+ // CHECK: %[[NEXT:[^ ]+]] = getelementptr i8* %[[ALIGN]] , i64 16
124
+ // CHECK: store i8* %[[NEXT]] , i8** %ap
125
+ // CHECK: bitcast i8* %[[ALIGN]] to %struct.test_vector*
127
126
struct test_vector { vector int x ; };
128
127
struct test_vector testva_vector (int x , ...)
129
128
{
0 commit comments