55@a1_8bit = external global i8
66@a7_8bit = external global i8
77@a8_8bit = external global i8
8+ %struct.all = type { i8 , i16 , i32 , i8 , i16 , i32 , i64 , float , double }
89
910define i8 @test_i8_args_8 (i8 %arg1 , i8 %arg2 , i8 %arg3 , i8 %arg4 , i8 %arg5 , i8 %arg6 , i8 %arg7 , i8 %arg8 ) {
1011 ; X86-LABEL: name: test_i8_args_8
@@ -745,7 +746,7 @@ define <32 x float> @test_return_v32f32() {
745746 ; X86-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
746747 ; X86-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s32>), [[LOAD]](p0) :: (store (<32 x s32>))
747748 ; X86-NEXT: $eax = COPY [[LOAD]](p0)
748- ; X86-NEXT: RET 0
749+ ; X86-NEXT: RET 0, $eax
749750 ;
750751 ; X64-LABEL: name: test_return_v32f32
751752 ; X64: bb.1 (%ir-block.0):
@@ -756,7 +757,7 @@ define <32 x float> @test_return_v32f32() {
756757 ; X64-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<32 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
757758 ; X64-NEXT: G_STORE [[BUILD_VECTOR]](<32 x s32>), [[COPY]](p0) :: (store (<32 x s32>))
758759 ; X64-NEXT: $rax = COPY [[COPY]](p0)
759- ; X64-NEXT: RET 0
760+ ; X64-NEXT: RET 0, $rax
760761 ret <32 x float > zeroinitializer
761762}
762763
@@ -793,3 +794,30 @@ define float @test_call_v32f32() {
793794 %elt = extractelement <32 x float > %vect , i32 7
794795 ret float %elt
795796}
797+
798+ define void @test_sret (ptr sret (%struct.all ) align 8 %result ) #0 {
799+ ; X86-LABEL: name: test_sret
800+ ; X86: bb.1.entry:
801+ ; X86-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
802+ ; X86-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (p0) from %fixed-stack.0, align 16)
803+ ; X86-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 104
804+ ; X86-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY [[LOAD]](p0)
805+ ; X86-NEXT: G_STORE [[C]](s8), [[COPY]](p0) :: (store (s8) into %ir.c, align 8)
806+ ; X86-NEXT: $eax = COPY [[LOAD]](p0)
807+ ; X86-NEXT: RET 0, $eax
808+ ;
809+ ; X64-LABEL: name: test_sret
810+ ; X64: bb.1.entry:
811+ ; X64-NEXT: liveins: $rdi
812+ ; X64-NEXT: {{ $}}
813+ ; X64-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $rdi
814+ ; X64-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 104
815+ ; X64-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY [[COPY]](p0)
816+ ; X64-NEXT: G_STORE [[C]](s8), [[COPY1]](p0) :: (store (s8) into %ir.c, align 8)
817+ ; X64-NEXT: $rax = COPY [[COPY]](p0)
818+ ; X64-NEXT: RET 0, $rax
819+ entry:
820+ %c = getelementptr inbounds %struct.all , ptr %result , i32 0 , i32 0
821+ store i8 104 , ptr %c , align 8
822+ ret void
823+ }
0 commit comments