poly128_t test_vldrq_p128(poly128_t * ptr) { // CHECK-LABEL: test_vldrq_p128 return vldrq_p128(ptr); // CHECK-AARCH64: ldr {{x[0-9]+}}, [{{x[0-9]+}}] // CHECK-AARCH64-NEXT: ldr {{x[0-9]+}}, [{{x[0-9]+}}, #8] // CHECK-ARM64: ldp {{x[0-9]+}}, {{x[0-9]+}}, [x0] }
void test_ld_st_p128(poly128_t * ptr) { // CHECK-LABEL: test_ld_st_p128 vstrq_p128(ptr+1, vldrq_p128(ptr)); // CHECK-AARCH64: ldr {{q[0-9]+}}, [{{x[0-9]+}}] // CHECK-AARCH64-NEXT: str {{q[0-9]+}}, [{{x[0-9]+}}, #16] // CHECK-ARM64: ldp [[PLO:x[0-9]+]], [[PHI:x[0-9]+]], [{{x[0-9]+}}] // CHECK-ARM64-NEXT: stp [[PLO]], [[PHI]], [{{x[0-9]+}}, #16] }
foo (poly128_t* ptr) { return vldrq_p128 (ptr); }
void test_ld_st_p128(poly128_t * ptr) { // CHECK-LABEL: test_ld_st_p128 vstrq_p128(ptr+1, vldrq_p128(ptr)); // CHECK: ldr {{q[0-9]+}}, [{{x[0-9]+}}] // CHECK-NEXT: str {{q[0-9]+}}, [{{x[0-9]+}}, #16] }
poly128_t test_vldrq_p128(poly128_t * ptr) { // CHECK-LABEL: test_vldrq_p128 return vldrq_p128(ptr); // CHECK: ldr {{x[0-9]+}}, [{{x[0-9]+}}] // CHECK-NEXT: ldr {{x[0-9]+}}, [{{x[0-9]+}}, #8] }
// CHECK-LABEL: define void @test_ld_st_p128(i128* %ptr) #0 { // CHECK: [[TMP0:%.*]] = bitcast i128* %ptr to i8* // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to i128* // CHECK: [[TMP2:%.*]] = load i128, i128* [[TMP1]] // CHECK: [[ADD_PTR:%.*]] = getelementptr inbounds i128, i128* %ptr, i64 1 // CHECK: [[TMP3:%.*]] = bitcast i128* [[ADD_PTR]] to i8* // CHECK: [[TMP4:%.*]] = bitcast i8* [[TMP3]] to i128* // CHECK: store i128 [[TMP2]], i128* [[TMP4]] // CHECK: ret void void test_ld_st_p128(poly128_t * ptr) { vstrq_p128(ptr+1, vldrq_p128(ptr)); }
// CHECK-LABEL: define i128 @test_vldrq_p128(i128* %ptr) #0 { // CHECK: [[TMP0:%.*]] = bitcast i128* %ptr to i8* // CHECK: [[TMP1:%.*]] = bitcast i8* [[TMP0]] to i128* // CHECK: [[TMP2:%.*]] = load i128, i128* [[TMP1]] // CHECK: ret i128 [[TMP2]] poly128_t test_vldrq_p128(poly128_t * ptr) { return vldrq_p128(ptr); }