summaryrefslogtreecommitdiff
path: root/llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll')
-rw-r--r--llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll b/llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll
index c885897f3155..04638b0ddac9 100644
--- a/llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll
+++ b/llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll
@@ -3,6 +3,8 @@
; Make sure that opaque pointer intrinsic remangling upgrade works.
+%int8x16x2_t = type { <16 x i8>, <16 x i8> }
+
declare i32* @fake_personality_function()
declare void @func()
@@ -43,5 +45,22 @@ define i8* @test_ptr_annotation(i8* %p) {
ret i8* %p2
}
+
+define void @test_struct_return(%int8x16x2_t* %res.p, i8* %a) {
+; CHECK-LABEL: @test_struct_return(
+; CHECK-NEXT: [[TMP1:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr [[A:%.*]])
+; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 0
+; CHECK-NEXT: [[TMP3:%.*]] = insertvalue [[INT8X16X2_T:%.*]] poison, <16 x i8> [[TMP2]], 0
+; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP1]], 1
+; CHECK-NEXT: [[TMP5:%.*]] = insertvalue [[INT8X16X2_T]] [[TMP3]], <16 x i8> [[TMP4]], 1
+; CHECK-NEXT: store [[INT8X16X2_T]] [[TMP5]], ptr [[RES_P:%.*]], align 16
+; CHECK-NEXT: ret void
+;
+ %res = call %int8x16x2_t @llvm.aarch64.neon.ld1x2.v16i8.p0i8(i8* %a)
+ store %int8x16x2_t %res, %int8x16x2_t* %res.p
+ ret void
+}
+
declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
declare i8* @llvm.ptr.annotation.p0i8(i8*, i8*, i8*, i32, i8*)
+declare %int8x16x2_t @llvm.aarch64.neon.ld1x2.v16i8.p0i8(i8*)