Lines Matching full:arm64
2 …g_cc1 -Wall -Werror -triple arm64-apple-ios7.0 -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s…
11 // CHECK-ARM64-LABEL: @test_ldrex in test_ldrex()
17 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i8(i8* %addr) in test_ldrex()
18 // CHECK-ARM64: trunc i64 [[INTRES]] to i8 in test_ldrex()
25 // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* in test_ldrex()
26 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i16(i16* [[ADDR16]]) in test_ldrex()
27 // CHECK-ARM64: trunc i64 [[INTRES]] to i16 in test_ldrex()
33 // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* in test_ldrex()
34 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[ADDR32]]) in test_ldrex()
35 // CHECK-ARM64: trunc i64 [[INTRES]] to i32 in test_ldrex()
42 // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* in test_ldrex()
43 // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* [[ADDR64]]) in test_ldrex()
49 // CHECK-ARM64: call i64 @llvm.aarch64.ldxr.p0i64(i64* %addr64) in test_ldrex()
56 // CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* in test_ldrex()
57 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i32(i32* [[INTADDR]]) in test_ldrex()
58 // CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32 in test_ldrex()
59 // CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float in test_ldrex()
73 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* in test_ldrex()
74 // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* in test_ldrex()
75 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]]) in test_ldrex()
76 // CHECK-ARM64: bitcast i64 [[INTRES]] to double in test_ldrex()
84 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32** in test_ldrex()
85 // CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64* in test_ldrex()
86 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]]) in test_ldrex()
87 // CHECK-ARM64: inttoptr i64 [[INTRES]] to i32* in test_ldrex()
95 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** in test_ldrex()
96 // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* in test_ldrex()
97 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldxr.p0i64(i64* [[TMP5]]) in test_ldrex()
98 // CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple* in test_ldrex()
104 // CHECK-ARM64-LABEL: @test_ldaex in test_ldaex()
110 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i8(i8* %addr) in test_ldaex()
111 // CHECK-ARM64: trunc i64 [[INTRES]] to i8 in test_ldaex()
118 // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* in test_ldaex()
119 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i16(i16* [[ADDR16]]) in test_ldaex()
120 // CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i16 in test_ldaex()
126 // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* in test_ldaex()
127 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[ADDR32]]) in test_ldaex()
128 // CHECK-ARM64: trunc i64 [[INTRES]] to i32 in test_ldaex()
135 // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* in test_ldaex()
136 // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[ADDR64]]) in test_ldaex()
142 // CHECK-ARM64: call i64 @llvm.aarch64.ldaxr.p0i64(i64* %addr64) in test_ldaex()
149 // CHECK-ARM64: [[INTADDR:%.*]] = bitcast float* %addrfloat to i32* in test_ldaex()
150 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i32(i32* [[INTADDR]]) in test_ldaex()
151 // CHECK-ARM64: [[TRUNCRES:%.*]] = trunc i64 [[INTRES]] to i32 in test_ldaex()
152 // CHECK-ARM64: bitcast i32 [[TRUNCRES]] to float in test_ldaex()
166 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* in test_ldaex()
167 // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* in test_ldaex()
168 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]]) in test_ldaex()
169 // CHECK-ARM64: bitcast i64 [[INTRES]] to double in test_ldaex()
177 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to i32** in test_ldaex()
178 // CHECK-ARM64: [[TMP5:%.*]] = bitcast i32** [[TMP4]] to i64* in test_ldaex()
179 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]]) in test_ldaex()
180 // CHECK-ARM64: inttoptr i64 [[INTRES]] to i32* in test_ldaex()
188 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** in test_ldaex()
189 // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* in test_ldaex()
190 // CHECK-ARM64: [[INTRES:%.*]] = call i64 @llvm.aarch64.ldaxr.p0i64(i64* [[TMP5]]) in test_ldaex()
191 // CHECK-ARM64: inttoptr i64 [[INTRES]] to %struct.Simple* in test_ldaex()
197 // CHECK-ARM64-LABEL: @test_strex in test_strex()
203 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i8(i64 4, i8* %addr) in test_strex()
209 // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* in test_strex()
210 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i16(i64 42, i16* [[ADDR16]]) in test_strex()
216 // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* in test_strex()
217 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 42, i32* [[ADDR32]]) in test_strex()
229 // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* in test_strex()
230 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 42, i64* [[ADDR64]]) in test_strex()
237 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float* in test_strex()
238 // CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* in test_strex()
239 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i32(i64 1076754509, i32* [[TMP5]]) in test_strex()
251 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* in test_strex()
252 // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* in test_strex()
253 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 4614256650576692846, i64* [[TMP5]]) in test_strex()
261 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** in test_strex()
262 // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* in test_strex()
263 // CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64 in test_strex()
264 // CHECK-ARM64: call i32 @llvm.aarch64.stxr.p0i64(i64 [[INTVAL]], i64* [[TMP5]]) in test_strex()
271 // CHECK-ARM64-LABEL: @test_stlex in test_stlex()
277 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i8(i64 4, i8* %addr) in test_stlex()
283 // CHECK-ARM64: [[ADDR16:%.*]] = bitcast i8* %addr to i16* in test_stlex()
284 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i16(i64 42, i16* [[ADDR16]]) in test_stlex()
290 // CHECK-ARM64: [[ADDR32:%.*]] = bitcast i8* %addr to i32* in test_stlex()
291 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 42, i32* [[ADDR32]]) in test_stlex()
303 // CHECK-ARM64: [[ADDR64:%.*]] = bitcast i8* %addr to i64* in test_stlex()
304 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 42, i64* [[ADDR64]]) in test_stlex()
311 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to float* in test_stlex()
312 // CHECK-ARM64: [[TMP5:%.*]] = bitcast float* [[TMP4]] to i32* in test_stlex()
313 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i32(i64 1076754509, i32* [[TMP5]]) in test_stlex()
325 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to double* in test_stlex()
326 // CHECK-ARM64: [[TMP5:%.*]] = bitcast double* [[TMP4]] to i64* in test_stlex()
327 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 4614256650576692846, i64* [[TMP5]]) in test_stlex()
335 // CHECK-ARM64: [[TMP4:%.*]] = bitcast i8* %addr to %struct.Simple** in test_stlex()
336 // CHECK-ARM64: [[TMP5:%.*]] = bitcast %struct.Simple** [[TMP4]] to i64* in test_stlex()
337 // CHECK-ARM64: [[INTVAL:%.*]] = ptrtoint %struct.Simple* %var to i64 in test_stlex()
338 // CHECK-ARM64: call i32 @llvm.aarch64.stlxr.p0i64(i64 [[INTVAL]], i64* [[TMP5]]) in test_stlex()
345 // CHECK-ARM64-LABEL: @test_clrex in test_clrex()
349 // CHECK-ARM64: call void @llvm.aarch64.clrex() in test_clrex()
356 // CHECK-ARM64-LABEL: @test_ldrex_128 in test_ldrex_128()
359 // CHECK-ARM64: [[ADDR8:%.*]] = bitcast i128* %addr to i8* in test_ldrex_128()
360 // CHECK-ARM64: [[STRUCTRES:%.*]] = call { i64, i64 } @llvm.aarch64.ldxp(i8* [[ADDR8]]) in test_ldrex_128()
361 // CHECK-ARM64: [[RESHI:%.*]] = extractvalue { i64, i64 } [[STRUCTRES]], 1 in test_ldrex_128()
362 // CHECK-ARM64: [[RESLO:%.*]] = extractvalue { i64, i64 } [[STRUCTRES]], 0 in test_ldrex_128()
363 // CHECK-ARM64: [[RESHI64:%.*]] = zext i64 [[RESHI]] to i128 in test_ldrex_128()
364 // CHECK-ARM64: [[RESLO64:%.*]] = zext i64 [[RESLO]] to i128 in test_ldrex_128()
365 // CHECK-ARM64: [[RESHIHI:%.*]] = shl nuw i128 [[RESHI64]], 64 in test_ldrex_128()
366 // CHECK-ARM64: [[INTRES:%.*]] = or i128 [[RESHIHI]], [[RESLO64]] in test_ldrex_128()
367 // CHECK-ARM64: ret i128 [[INTRES]] in test_ldrex_128()
371 // CHECK-ARM64-LABEL: @test_strex_128 in test_strex_128()
374 // CHECK-ARM64: store i128 %val, i128* [[TMP:%.*]], align 16 in test_strex_128()
375 // CHECK-ARM64: [[LOHI_ADDR:%.*]] = bitcast i128* [[TMP]] to { i64, i64 }* in test_strex_128()
376 // CHECK-ARM64: [[LOHI:%.*]] = load { i64, i64 }, { i64, i64 }* [[LOHI_ADDR]] in test_strex_128()
377 // CHECK-ARM64: [[LO:%.*]] = extractvalue { i64, i64 } [[LOHI]], 0 in test_strex_128()
378 // CHECK-ARM64: [[HI:%.*]] = extractvalue { i64, i64 } [[LOHI]], 1 in test_strex_128()
379 // CHECK-ARM64: [[ADDR8:%.*]] = bitcast i128* %addr to i8* in test_strex_128()
380 // CHECK-ARM64: call i32 @llvm.aarch64.stxp(i64 [[LO]], i64 [[HI]], i8* [[ADDR8]]) in test_strex_128()
384 // CHECK-ARM64-LABEL: @test_ldaex_128 in test_ldaex_128()
387 // CHECK-ARM64: [[ADDR8:%.*]] = bitcast i128* %addr to i8* in test_ldaex_128()
388 // CHECK-ARM64: [[STRUCTRES:%.*]] = call { i64, i64 } @llvm.aarch64.ldaxp(i8* [[ADDR8]]) in test_ldaex_128()
389 // CHECK-ARM64: [[RESHI:%.*]] = extractvalue { i64, i64 } [[STRUCTRES]], 1 in test_ldaex_128()
390 // CHECK-ARM64: [[RESLO:%.*]] = extractvalue { i64, i64 } [[STRUCTRES]], 0 in test_ldaex_128()
391 // CHECK-ARM64: [[RESHI64:%.*]] = zext i64 [[RESHI]] to i128 in test_ldaex_128()
392 // CHECK-ARM64: [[RESLO64:%.*]] = zext i64 [[RESLO]] to i128 in test_ldaex_128()
393 // CHECK-ARM64: [[RESHIHI:%.*]] = shl nuw i128 [[RESHI64]], 64 in test_ldaex_128()
394 // CHECK-ARM64: [[INTRES:%.*]] = or i128 [[RESHIHI]], [[RESLO64]] in test_ldaex_128()
395 // CHECK-ARM64: ret i128 [[INTRES]] in test_ldaex_128()
399 // CHECK-ARM64-LABEL: @test_stlex_128 in test_stlex_128()
402 // CHECK-ARM64: store i128 %val, i128* [[TMP:%.*]], align 16 in test_stlex_128()
403 // CHECK-ARM64: [[LOHI_ADDR:%.*]] = bitcast i128* [[TMP]] to { i64, i64 }* in test_stlex_128()
404 // CHECK-ARM64: [[LOHI:%.*]] = load { i64, i64 }, { i64, i64 }* [[LOHI_ADDR]] in test_stlex_128()
405 // CHECK-ARM64: [[LO:%.*]] = extractvalue { i64, i64 } [[LOHI]], 0 in test_stlex_128()
406 // CHECK-ARM64: [[HI:%.*]] = extractvalue { i64, i64 } [[LOHI]], 1 in test_stlex_128()
407 // CHECK-ARM64: [[ADDR8:%.*]] = bitcast i128* %addr to i8* in test_stlex_128()
408 // CHECK-ARM64: [[RES:%.*]] = call i32 @llvm.aarch64.stlxp(i64 [[LO]], i64 [[HI]], i8* [[ADDR8]]) in test_stlex_128()