@@ -143,60 +143,82 @@ int v4() { return __builtin_cpu_supports("x86-64-v4"); }
143
143
// CHECK-PPC-NEXT: br label [[RETURN]]
144
144
// CHECK-PPC: if.else5:
145
145
// CHECK-PPC-NEXT: [[CPU_IS6:%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
146
- // CHECK-PPC-NEXT: [[TMP9:%.*]] = icmp eq i32 [[CPU_IS6]], 45
147
- // CHECK-PPC-NEXT: br i1 [[TMP9]], label [[IF_THEN7:%.*]], label [[IF_ELSE9 :%.*]]
146
+ // CHECK-PPC-NEXT: [[TMP9:%.*]] = icmp eq i32 [[CPU_IS6]], 39
147
+ // CHECK-PPC-NEXT: br i1 [[TMP9]], label [[IF_THEN7:%.*]], label [[IF_ELSE8 :%.*]]
148
148
// CHECK-PPC: if.then7:
149
149
// CHECK-PPC-NEXT: [[TMP10:%.*]] = load i32, ptr [[A_ADDR]], align 4
150
- // CHECK-PPC-NEXT: [[ADD8 :%.*]] = add nsw i32 [[TMP10]], 3
151
- // CHECK-PPC-NEXT: store i32 [[ADD8 ]], ptr [[RETVAL]], align 4
150
+ // CHECK-PPC-NEXT: [[MUL :%.*]] = mul nsw i32 [[TMP10]], 3
151
+ // CHECK-PPC-NEXT: store i32 [[MUL ]], ptr [[RETVAL]], align 4
152
152
// CHECK-PPC-NEXT: br label [[RETURN]]
153
- // CHECK-PPC: if.else9 :
154
- // CHECK-PPC-NEXT: [[CPU_IS10 :%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
155
- // CHECK-PPC-NEXT: [[TMP11:%.*]] = icmp eq i32 [[CPU_IS10 ]], 46
156
- // CHECK-PPC-NEXT: br i1 [[TMP11]], label [[IF_THEN11 :%.*]], label [[IF_ELSE13 :%.*]]
157
- // CHECK-PPC: if.then11 :
153
+ // CHECK-PPC: if.else8 :
154
+ // CHECK-PPC-NEXT: [[CPU_IS9 :%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
155
+ // CHECK-PPC-NEXT: [[TMP11:%.*]] = icmp eq i32 [[CPU_IS9 ]], 33
156
+ // CHECK-PPC-NEXT: br i1 [[TMP11]], label [[IF_THEN10 :%.*]], label [[IF_ELSE12 :%.*]]
157
+ // CHECK-PPC: if.then10 :
158
158
// CHECK-PPC-NEXT: [[TMP12:%.*]] = load i32, ptr [[A_ADDR]], align 4
159
- // CHECK-PPC-NEXT: [[SUB12 :%.*]] = sub nsw i32 [[TMP12]], 3
160
- // CHECK-PPC-NEXT: store i32 [[SUB12 ]], ptr [[RETVAL]], align 4
159
+ // CHECK-PPC-NEXT: [[MUL11 :%.*]] = mul nsw i32 [[TMP12]], 4
160
+ // CHECK-PPC-NEXT: store i32 [[MUL11 ]], ptr [[RETVAL]], align 4
161
161
// CHECK-PPC-NEXT: br label [[RETURN]]
162
- // CHECK-PPC: if.else13 :
163
- // CHECK-PPC-NEXT: [[CPU_IS14 :%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
164
- // CHECK-PPC-NEXT: [[TMP13:%.*]] = icmp eq i32 [[CPU_IS14 ]], 47
165
- // CHECK-PPC-NEXT: br i1 [[TMP13]], label [[IF_THEN15 :%.*]], label [[IF_ELSE17 :%.*]]
166
- // CHECK-PPC: if.then15 :
162
+ // CHECK-PPC: if.else12 :
163
+ // CHECK-PPC-NEXT: [[CPU_IS13 :%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
164
+ // CHECK-PPC-NEXT: [[TMP13:%.*]] = icmp eq i32 [[CPU_IS13 ]], 45
165
+ // CHECK-PPC-NEXT: br i1 [[TMP13]], label [[IF_THEN14 :%.*]], label [[IF_ELSE16 :%.*]]
166
+ // CHECK-PPC: if.then14 :
167
167
// CHECK-PPC-NEXT: [[TMP14:%.*]] = load i32, ptr [[A_ADDR]], align 4
168
- // CHECK-PPC-NEXT: [[ADD16 :%.*]] = add nsw i32 [[TMP14]], 7
169
- // CHECK-PPC-NEXT: store i32 [[ADD16 ]], ptr [[RETVAL]], align 4
168
+ // CHECK-PPC-NEXT: [[ADD15 :%.*]] = add nsw i32 [[TMP14]], 3
169
+ // CHECK-PPC-NEXT: store i32 [[ADD15 ]], ptr [[RETVAL]], align 4
170
170
// CHECK-PPC-NEXT: br label [[RETURN]]
171
- // CHECK-PPC: if.else17 :
172
- // CHECK-PPC-NEXT: [[CPU_IS18 :%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
173
- // CHECK-PPC-NEXT: [[TMP15:%.*]] = icmp eq i32 [[CPU_IS18 ]], 48
174
- // CHECK-PPC-NEXT: br i1 [[TMP15]], label [[IF_THEN19 :%.*]], label [[IF_END :%.*]]
175
- // CHECK-PPC: if.then19 :
171
+ // CHECK-PPC: if.else16 :
172
+ // CHECK-PPC-NEXT: [[CPU_IS17 :%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
173
+ // CHECK-PPC-NEXT: [[TMP15:%.*]] = icmp eq i32 [[CPU_IS17 ]], 46
174
+ // CHECK-PPC-NEXT: br i1 [[TMP15]], label [[IF_THEN18 :%.*]], label [[IF_ELSE20 :%.*]]
175
+ // CHECK-PPC: if.then18 :
176
176
// CHECK-PPC-NEXT: [[TMP16:%.*]] = load i32, ptr [[A_ADDR]], align 4
177
- // CHECK-PPC-NEXT: [[SUB20:%.*]] = sub nsw i32 [[TMP16]], 7
178
- // CHECK-PPC-NEXT: store i32 [[SUB20]], ptr [[RETVAL]], align 4
177
+ // CHECK-PPC-NEXT: [[SUB19:%.*]] = sub nsw i32 [[TMP16]], 3
178
+ // CHECK-PPC-NEXT: store i32 [[SUB19]], ptr [[RETVAL]], align 4
179
+ // CHECK-PPC-NEXT: br label [[RETURN]]
180
+ // CHECK-PPC: if.else20:
181
+ // CHECK-PPC-NEXT: [[CPU_IS21:%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
182
+ // CHECK-PPC-NEXT: [[TMP17:%.*]] = icmp eq i32 [[CPU_IS21]], 47
183
+ // CHECK-PPC-NEXT: br i1 [[TMP17]], label [[IF_THEN22:%.*]], label [[IF_ELSE24:%.*]]
184
+ // CHECK-PPC: if.then22:
185
+ // CHECK-PPC-NEXT: [[TMP18:%.*]] = load i32, ptr [[A_ADDR]], align 4
186
+ // CHECK-PPC-NEXT: [[ADD23:%.*]] = add nsw i32 [[TMP18]], 7
187
+ // CHECK-PPC-NEXT: store i32 [[ADD23]], ptr [[RETVAL]], align 4
188
+ // CHECK-PPC-NEXT: br label [[RETURN]]
189
+ // CHECK-PPC: if.else24:
190
+ // CHECK-PPC-NEXT: [[CPU_IS25:%.*]] = call i32 @llvm.ppc.fixed.addr.ld(i32 3)
191
+ // CHECK-PPC-NEXT: [[TMP19:%.*]] = icmp eq i32 [[CPU_IS25]], 48
192
+ // CHECK-PPC-NEXT: br i1 [[TMP19]], label [[IF_THEN26:%.*]], label [[IF_END:%.*]]
193
+ // CHECK-PPC: if.then26:
194
+ // CHECK-PPC-NEXT: [[TMP20:%.*]] = load i32, ptr [[A_ADDR]], align 4
195
+ // CHECK-PPC-NEXT: [[SUB27:%.*]] = sub nsw i32 [[TMP20]], 7
196
+ // CHECK-PPC-NEXT: store i32 [[SUB27]], ptr [[RETVAL]], align 4
179
197
// CHECK-PPC-NEXT: br label [[RETURN]]
180
198
// CHECK-PPC: if.end:
181
- // CHECK-PPC-NEXT: br label [[IF_END21:%.*]]
182
- // CHECK-PPC: if.end21:
183
- // CHECK-PPC-NEXT: br label [[IF_END22:%.*]]
184
- // CHECK-PPC: if.end22:
185
- // CHECK-PPC-NEXT: br label [[IF_END23:%.*]]
186
- // CHECK-PPC: if.end23:
187
- // CHECK-PPC-NEXT: br label [[IF_END24:%.*]]
188
- // CHECK-PPC: if.end24:
189
- // CHECK-PPC-NEXT: br label [[IF_END25:%.*]]
190
- // CHECK-PPC: if.end25:
191
- // CHECK-PPC-NEXT: br label [[IF_END26:%.*]]
192
- // CHECK-PPC: if.end26:
193
- // CHECK-PPC-NEXT: [[TMP17:%.*]] = load i32, ptr [[A_ADDR]], align 4
194
- // CHECK-PPC-NEXT: [[ADD27:%.*]] = add nsw i32 [[TMP17]], 5
195
- // CHECK-PPC-NEXT: store i32 [[ADD27]], ptr [[RETVAL]], align 4
199
+ // CHECK-PPC-NEXT: br label [[IF_END28:%.*]]
200
+ // CHECK-PPC: if.end28:
201
+ // CHECK-PPC-NEXT: br label [[IF_END29:%.*]]
202
+ // CHECK-PPC: if.end29:
203
+ // CHECK-PPC-NEXT: br label [[IF_END30:%.*]]
204
+ // CHECK-PPC: if.end30:
205
+ // CHECK-PPC-NEXT: br label [[IF_END31:%.*]]
206
+ // CHECK-PPC: if.end31:
207
+ // CHECK-PPC-NEXT: br label [[IF_END32:%.*]]
208
+ // CHECK-PPC: if.end32:
209
+ // CHECK-PPC-NEXT: br label [[IF_END33:%.*]]
210
+ // CHECK-PPC: if.end33:
211
+ // CHECK-PPC-NEXT: br label [[IF_END34:%.*]]
212
+ // CHECK-PPC: if.end34:
213
+ // CHECK-PPC-NEXT: br label [[IF_END35:%.*]]
214
+ // CHECK-PPC: if.end35:
215
+ // CHECK-PPC-NEXT: [[TMP21:%.*]] = load i32, ptr [[A_ADDR]], align 4
216
+ // CHECK-PPC-NEXT: [[ADD36:%.*]] = add nsw i32 [[TMP21]], 5
217
+ // CHECK-PPC-NEXT: store i32 [[ADD36]], ptr [[RETVAL]], align 4
196
218
// CHECK-PPC-NEXT: br label [[RETURN]]
197
219
// CHECK-PPC: return:
198
- // CHECK-PPC-NEXT: [[TMP18 :%.*]] = load i32, ptr [[RETVAL]], align 4
199
- // CHECK-PPC-NEXT: ret i32 [[TMP18 ]]
220
+ // CHECK-PPC-NEXT: [[TMP22 :%.*]] = load i32, ptr [[RETVAL]], align 4
221
+ // CHECK-PPC-NEXT: ret i32 [[TMP22 ]]
200
222
//
201
223
int test_ppc (int a ) {
202
224
if (__builtin_cpu_supports ("arch_3_00" )) // HWCAP2
@@ -205,6 +227,10 @@ int test_ppc(int a) {
205
227
return a - 5 ;
206
228
else if (__builtin_cpu_is ("power7" )) // CPUID
207
229
return a + a ;
230
+ else if (__builtin_cpu_is ("pwr7" )) // CPUID
231
+ return a * 3 ;
232
+ else if (__builtin_cpu_is ("ppc970" )) // CPUID
233
+ return a * 4 ;
208
234
else if (__builtin_cpu_is ("power8" ))
209
235
return a + 3 ;
210
236
else if (__builtin_cpu_is ("power9" ))
0 commit comments