brintos

brintos / llvm-project-archived public Read only

0
0
Text · 49.5 KiB · a797c23 Raw
824 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2; RUN: llc -O0 -mtriple=i386-linux-gnu   -mattr=+sse2 -global-isel -stop-after=irtranslator < %s | FileCheck %s --check-prefix=X863; RUN: llc -O0 -mtriple=x86_64-linux-gnu              -global-isel -stop-after=irtranslator < %s | FileCheck %s --check-prefix=X644 5@a1_8bit = external global i86@a7_8bit = external global i87@a8_8bit = external global i88%struct.all = type { i8, i16, i32, i8, i16, i32, i64, float, double }9 10define i8 @test_i8_args_8(i8 %arg1, i8 %arg2, i8 %arg3, i8 %arg4, i8 %arg5, i8 %arg6, i8 %arg7, i8 %arg8) {11  ; X86-LABEL: name: test_i8_args_812  ; X86: bb.1.entry:13  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.714  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s8) from %fixed-stack.7, align 16)15  ; X86-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD]](s32)16  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.617  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s8) from %fixed-stack.6, align 4)18  ; X86-NEXT:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD1]](s32)19  ; X86-NEXT:   [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.520  ; X86-NEXT:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p0) :: (invariant load (s8) from %fixed-stack.5, align 8)21  ; X86-NEXT:   [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD2]](s32)22  ; X86-NEXT:   [[FRAME_INDEX3:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.423  ; X86-NEXT:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p0) :: (invariant load (s8) from %fixed-stack.4, align 4)24  ; X86-NEXT:   [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD3]](s32)25  ; X86-NEXT:   [[FRAME_INDEX4:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.326  ; X86-NEXT:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p0) :: (invariant load (s8) from %fixed-stack.3, align 16)27  ; X86-NEXT:   [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD4]](s32)28  ; X86-NEXT:   [[FRAME_INDEX5:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.229  ; X86-NEXT:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p0) :: (invariant load (s8) from %fixed-stack.2, align 4)30  ; X86-NEXT:   [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD5]](s32)31  ; X86-NEXT:   [[FRAME_INDEX6:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.132  ; X86-NEXT:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p0) :: (invariant load (s8) from %fixed-stack.1, align 8)33  ; X86-NEXT:   [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD6]](s32)34  ; X86-NEXT:   [[FRAME_INDEX7:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.035  ; X86-NEXT:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p0) :: (invariant load (s8) from %fixed-stack.0, align 4)36  ; X86-NEXT:   [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD7]](s32)37  ; X86-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a1_8bit38  ; X86-NEXT:   [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a7_8bit39  ; X86-NEXT:   [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a8_8bit40  ; X86-NEXT:   G_STORE [[TRUNC]](s8), [[GV]](p0) :: (store (s8) into @a1_8bit)41  ; X86-NEXT:   G_STORE [[TRUNC6]](s8), [[GV1]](p0) :: (store (s8) into @a7_8bit)42  ; X86-NEXT:   G_STORE [[TRUNC7]](s8), [[GV2]](p0) :: (store (s8) into @a8_8bit)43  ; X86-NEXT:   $al = COPY [[TRUNC]](s8)44  ; X86-NEXT:   RET 0, implicit $al45  ;46  ; X64-LABEL: name: test_i8_args_847  ; X64: bb.1.entry:48  ; X64-NEXT:   liveins: $ecx, $edi, $edx, $esi, $r8d, $r9d49  ; X64-NEXT: {{  $}}50  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi51  ; X64-NEXT:   [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32)52  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi53  ; X64-NEXT:   [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)54  ; X64-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $edx55  ; X64-NEXT:   [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[COPY2]](s32)56  ; X64-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $ecx57  ; X64-NEXT:   [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[COPY3]](s32)58  ; X64-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $r8d59  ; X64-NEXT:   [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[COPY4]](s32)60  ; X64-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $r9d61  ; X64-NEXT:   [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[COPY5]](s32)62  ; X64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.163  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s8) from %fixed-stack.1, align 16)64  ; X64-NEXT:   [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD]](s32)65  ; X64-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.066  ; X64-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s8) from %fixed-stack.0, align 8)67  ; X64-NEXT:   [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[LOAD1]](s32)68  ; X64-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a1_8bit69  ; X64-NEXT:   [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a7_8bit70  ; X64-NEXT:   [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a8_8bit71  ; X64-NEXT:   G_STORE [[TRUNC]](s8), [[GV]](p0) :: (store (s8) into @a1_8bit)72  ; X64-NEXT:   G_STORE [[TRUNC6]](s8), [[GV1]](p0) :: (store (s8) into @a7_8bit)73  ; X64-NEXT:   G_STORE [[TRUNC7]](s8), [[GV2]](p0) :: (store (s8) into @a8_8bit)74  ; X64-NEXT:   $al = COPY [[TRUNC]](s8)75  ; X64-NEXT:   RET 0, implicit $al76entry:77  store i8 %arg1, ptr @a1_8bit78  store i8 %arg7, ptr @a7_8bit79  store i8 %arg8, ptr @a8_8bit80  ret i8 %arg181}82 83@a1_32bit = external global i3284@a7_32bit = external global i3285@a8_32bit = external global i3286 87define i32 @test_i32_args_8(i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7, i32 %arg8) {88  ; X86-LABEL: name: test_i32_args_889  ; X86: bb.1.entry:90  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.791  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.7, align 16)92  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.693  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.6)94  ; X86-NEXT:   [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.595  ; X86-NEXT:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p0) :: (invariant load (s32) from %fixed-stack.5, align 8)96  ; X86-NEXT:   [[FRAME_INDEX3:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.497  ; X86-NEXT:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p0) :: (invariant load (s32) from %fixed-stack.4)98  ; X86-NEXT:   [[FRAME_INDEX4:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.399  ; X86-NEXT:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p0) :: (invariant load (s32) from %fixed-stack.3, align 16)100  ; X86-NEXT:   [[FRAME_INDEX5:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.2101  ; X86-NEXT:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p0) :: (invariant load (s32) from %fixed-stack.2)102  ; X86-NEXT:   [[FRAME_INDEX6:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1103  ; X86-NEXT:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p0) :: (invariant load (s32) from %fixed-stack.1, align 8)104  ; X86-NEXT:   [[FRAME_INDEX7:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0105  ; X86-NEXT:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p0) :: (invariant load (s32) from %fixed-stack.0)106  ; X86-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a1_32bit107  ; X86-NEXT:   [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a7_32bit108  ; X86-NEXT:   [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a8_32bit109  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[GV]](p0) :: (store (s32) into @a1_32bit)110  ; X86-NEXT:   G_STORE [[LOAD6]](s32), [[GV1]](p0) :: (store (s32) into @a7_32bit)111  ; X86-NEXT:   G_STORE [[LOAD7]](s32), [[GV2]](p0) :: (store (s32) into @a8_32bit)112  ; X86-NEXT:   $eax = COPY [[LOAD]](s32)113  ; X86-NEXT:   RET 0, implicit $eax114  ;115  ; X64-LABEL: name: test_i32_args_8116  ; X64: bb.1.entry:117  ; X64-NEXT:   liveins: $ecx, $edi, $edx, $esi, $r8d, $r9d118  ; X64-NEXT: {{  $}}119  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi120  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi121  ; X64-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $edx122  ; X64-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $ecx123  ; X64-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $r8d124  ; X64-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $r9d125  ; X64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1126  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.1, align 16)127  ; X64-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0128  ; X64-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.0, align 8)129  ; X64-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a1_32bit130  ; X64-NEXT:   [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a7_32bit131  ; X64-NEXT:   [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a8_32bit132  ; X64-NEXT:   G_STORE [[COPY]](s32), [[GV]](p0) :: (store (s32) into @a1_32bit)133  ; X64-NEXT:   G_STORE [[LOAD]](s32), [[GV1]](p0) :: (store (s32) into @a7_32bit)134  ; X64-NEXT:   G_STORE [[LOAD1]](s32), [[GV2]](p0) :: (store (s32) into @a8_32bit)135  ; X64-NEXT:   $eax = COPY [[COPY]](s32)136  ; X64-NEXT:   RET 0, implicit $eax137entry:138  store i32 %arg1, ptr @a1_32bit139  store i32 %arg7, ptr @a7_32bit140  store i32 %arg8, ptr @a8_32bit141  ret i32 %arg1142}143 144@a1_64bit = external global i64145@a7_64bit = external global i64146@a8_64bit = external global i64147 148; ... a bunch more that we don't track ...149define i64 @test_i64_args_8(i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %arg5, i64 %arg6, i64 %arg7, i64 %arg8) {150  ; X86-LABEL: name: test_i64_args_8151  ; X86: bb.1.entry:152  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.15153  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.15, align 16)154  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.14155  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.14)156  ; X86-NEXT:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD]](s32), [[LOAD1]](s32)157  ; X86-NEXT:   [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.13158  ; X86-NEXT:   [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p0) :: (invariant load (s32) from %fixed-stack.13, align 8)159  ; X86-NEXT:   [[FRAME_INDEX3:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.12160  ; X86-NEXT:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX3]](p0) :: (invariant load (s32) from %fixed-stack.12)161  ; X86-NEXT:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD2]](s32), [[LOAD3]](s32)162  ; X86-NEXT:   [[FRAME_INDEX4:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.11163  ; X86-NEXT:   [[LOAD4:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX4]](p0) :: (invariant load (s32) from %fixed-stack.11, align 16)164  ; X86-NEXT:   [[FRAME_INDEX5:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.10165  ; X86-NEXT:   [[LOAD5:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX5]](p0) :: (invariant load (s32) from %fixed-stack.10)166  ; X86-NEXT:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD4]](s32), [[LOAD5]](s32)167  ; X86-NEXT:   [[FRAME_INDEX6:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.9168  ; X86-NEXT:   [[LOAD6:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX6]](p0) :: (invariant load (s32) from %fixed-stack.9, align 8)169  ; X86-NEXT:   [[FRAME_INDEX7:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.8170  ; X86-NEXT:   [[LOAD7:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX7]](p0) :: (invariant load (s32) from %fixed-stack.8)171  ; X86-NEXT:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD6]](s32), [[LOAD7]](s32)172  ; X86-NEXT:   [[FRAME_INDEX8:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.7173  ; X86-NEXT:   [[LOAD8:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX8]](p0) :: (invariant load (s32) from %fixed-stack.7, align 16)174  ; X86-NEXT:   [[FRAME_INDEX9:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.6175  ; X86-NEXT:   [[LOAD9:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX9]](p0) :: (invariant load (s32) from %fixed-stack.6)176  ; X86-NEXT:   [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD8]](s32), [[LOAD9]](s32)177  ; X86-NEXT:   [[FRAME_INDEX10:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.5178  ; X86-NEXT:   [[LOAD10:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX10]](p0) :: (invariant load (s32) from %fixed-stack.5, align 8)179  ; X86-NEXT:   [[FRAME_INDEX11:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.4180  ; X86-NEXT:   [[LOAD11:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX11]](p0) :: (invariant load (s32) from %fixed-stack.4)181  ; X86-NEXT:   [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD10]](s32), [[LOAD11]](s32)182  ; X86-NEXT:   [[FRAME_INDEX12:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.3183  ; X86-NEXT:   [[LOAD12:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX12]](p0) :: (invariant load (s32) from %fixed-stack.3, align 16)184  ; X86-NEXT:   [[FRAME_INDEX13:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.2185  ; X86-NEXT:   [[LOAD13:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX13]](p0) :: (invariant load (s32) from %fixed-stack.2)186  ; X86-NEXT:   [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD12]](s32), [[LOAD13]](s32)187  ; X86-NEXT:   [[FRAME_INDEX14:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1188  ; X86-NEXT:   [[LOAD14:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX14]](p0) :: (invariant load (s32) from %fixed-stack.1, align 8)189  ; X86-NEXT:   [[FRAME_INDEX15:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0190  ; X86-NEXT:   [[LOAD15:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX15]](p0) :: (invariant load (s32) from %fixed-stack.0)191  ; X86-NEXT:   [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[LOAD14]](s32), [[LOAD15]](s32)192  ; X86-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a1_64bit193  ; X86-NEXT:   [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a7_64bit194  ; X86-NEXT:   [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a8_64bit195  ; X86-NEXT:   G_STORE [[MV]](s64), [[GV]](p0) :: (store (s64) into @a1_64bit, align 4)196  ; X86-NEXT:   G_STORE [[MV6]](s64), [[GV1]](p0) :: (store (s64) into @a7_64bit, align 4)197  ; X86-NEXT:   G_STORE [[MV7]](s64), [[GV2]](p0) :: (store (s64) into @a8_64bit, align 4)198  ; X86-NEXT:   [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)199  ; X86-NEXT:   $eax = COPY [[UV]](s32)200  ; X86-NEXT:   $edx = COPY [[UV1]](s32)201  ; X86-NEXT:   RET 0, implicit $eax, implicit $edx202  ;203  ; X64-LABEL: name: test_i64_args_8204  ; X64: bb.1.entry:205  ; X64-NEXT:   liveins: $rcx, $rdi, $rdx, $rsi, $r8, $r9206  ; X64-NEXT: {{  $}}207  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $rdi208  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $rsi209  ; X64-NEXT:   [[COPY2:%[0-9]+]]:_(s64) = COPY $rdx210  ; X64-NEXT:   [[COPY3:%[0-9]+]]:_(s64) = COPY $rcx211  ; X64-NEXT:   [[COPY4:%[0-9]+]]:_(s64) = COPY $r8212  ; X64-NEXT:   [[COPY5:%[0-9]+]]:_(s64) = COPY $r9213  ; X64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1214  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s64) from %fixed-stack.1, align 16)215  ; X64-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0216  ; X64-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s64) from %fixed-stack.0)217  ; X64-NEXT:   [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a1_64bit218  ; X64-NEXT:   [[GV1:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a7_64bit219  ; X64-NEXT:   [[GV2:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @a8_64bit220  ; X64-NEXT:   G_STORE [[COPY]](s64), [[GV]](p0) :: (store (s64) into @a1_64bit)221  ; X64-NEXT:   G_STORE [[LOAD]](s64), [[GV1]](p0) :: (store (s64) into @a7_64bit)222  ; X64-NEXT:   G_STORE [[LOAD1]](s64), [[GV2]](p0) :: (store (s64) into @a8_64bit)223  ; X64-NEXT:   $rax = COPY [[COPY]](s64)224  ; X64-NEXT:   RET 0, implicit $rax225entry:226  store i64 %arg1, ptr @a1_64bit227  store i64 %arg7, ptr @a7_64bit228  store i64 %arg8, ptr @a8_64bit229  ret i64 %arg1230}231 232define float @test_float_args(float %arg1, float %arg2) {233  ; X86-LABEL: name: test_float_args234  ; X86: bb.1 (%ir-block.0):235  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1236  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.1, align 16)237  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0238  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.0)239  ; X86-NEXT:   $fp0 = COPY [[LOAD1]](s32)240  ; X86-NEXT:   RET 0, implicit $fp0241  ;242  ; X64-LABEL: name: test_float_args243  ; X64: bb.1 (%ir-block.0):244  ; X64-NEXT:   liveins: $xmm0, $xmm1245  ; X64-NEXT: {{  $}}246  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $xmm0247  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $xmm1248  ; X64-NEXT:   $xmm0 = COPY [[COPY1]](s32)249  ; X64-NEXT:   RET 0, implicit $xmm0250  ret float %arg2251}252 253define double @test_double_args(double %arg1, double %arg2) {254  ; X86-LABEL: name: test_double_args255  ; X86: bb.1 (%ir-block.0):256  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1257  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s64) from %fixed-stack.1, align 16)258  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0259  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s64) from %fixed-stack.0)260  ; X86-NEXT:   $fp0 = COPY [[LOAD1]](s64)261  ; X86-NEXT:   RET 0, implicit $fp0262  ;263  ; X64-LABEL: name: test_double_args264  ; X64: bb.1 (%ir-block.0):265  ; X64-NEXT:   liveins: $xmm0, $xmm1266  ; X64-NEXT: {{  $}}267  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s64) = COPY $xmm0268  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(s64) = COPY $xmm1269  ; X64-NEXT:   $xmm0 = COPY [[COPY1]](s64)270  ; X64-NEXT:   RET 0, implicit $xmm0271  ret double %arg2272}273 274define <4 x i32> @test_v4i32_args(<4 x i32> %arg1, <4 x i32> %arg2) {275  ; X86-LABEL: name: test_v4i32_args276  ; X86: bb.1 (%ir-block.0):277  ; X86-NEXT:   liveins: $xmm0, $xmm1278  ; X86-NEXT: {{  $}}279  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0280  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1281  ; X86-NEXT:   $xmm0 = COPY [[COPY1]](<4 x s32>)282  ; X86-NEXT:   RET 0, implicit $xmm0283  ;284  ; X64-LABEL: name: test_v4i32_args285  ; X64: bb.1 (%ir-block.0):286  ; X64-NEXT:   liveins: $xmm0, $xmm1287  ; X64-NEXT: {{  $}}288  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0289  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1290  ; X64-NEXT:   $xmm0 = COPY [[COPY1]](<4 x s32>)291  ; X64-NEXT:   RET 0, implicit $xmm0292  ret <4 x i32> %arg2293}294 295define <8 x i32> @test_v8i32_args(<8 x i32> %arg1) {296  ; X86-LABEL: name: test_v8i32_args297  ; X86: bb.1 (%ir-block.0):298  ; X86-NEXT:   liveins: $xmm0, $xmm1299  ; X86-NEXT: {{  $}}300  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0301  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1302  ; X86-NEXT:   [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)303  ; X86-NEXT:   [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<8 x s32>)304  ; X86-NEXT:   $xmm0 = COPY [[UV]](<4 x s32>)305  ; X86-NEXT:   $xmm1 = COPY [[UV1]](<4 x s32>)306  ; X86-NEXT:   RET 0, implicit $xmm0, implicit $xmm1307  ;308  ; X64-LABEL: name: test_v8i32_args309  ; X64: bb.1 (%ir-block.0):310  ; X64-NEXT:   liveins: $xmm0, $xmm1311  ; X64-NEXT: {{  $}}312  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0313  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1314  ; X64-NEXT:   [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)315  ; X64-NEXT:   [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<8 x s32>)316  ; X64-NEXT:   $xmm0 = COPY [[UV]](<4 x s32>)317  ; X64-NEXT:   $xmm1 = COPY [[UV1]](<4 x s32>)318  ; X64-NEXT:   RET 0, implicit $xmm0, implicit $xmm1319  ret <8 x i32> %arg1320}321 322define void @test_void_return() {323  ; X86-LABEL: name: test_void_return324  ; X86: bb.1.entry:325  ; X86-NEXT:   RET 0326  ;327  ; X64-LABEL: name: test_void_return328  ; X64: bb.1.entry:329  ; X64-NEXT:   RET 0330entry:331  ret void332}333 334define ptr @test_memop_i32(ptr %p1) {335  ; X86-LABEL: name: test_memop_i32336  ; X86: bb.1 (%ir-block.0):337  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0338  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (p0) from %fixed-stack.0, align 16)339  ; X86-NEXT:   $eax = COPY [[LOAD]](p0)340  ; X86-NEXT:   RET 0, implicit $eax341  ;342  ; X64-LABEL: name: test_memop_i32343  ; X64: bb.1 (%ir-block.0):344  ; X64-NEXT:   liveins: $rdi345  ; X64-NEXT: {{  $}}346  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi347  ; X64-NEXT:   $rax = COPY [[COPY]](p0)348  ; X64-NEXT:   RET 0, implicit $rax349  ret ptr %p1;350}351 352declare void @trivial_callee()353define void @test_trivial_call() {354  ; X86-LABEL: name: test_trivial_call355  ; X86: bb.1 (%ir-block.0):356  ; X86-NEXT:   ADJCALLSTACKDOWN32 0, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp357  ; X86-NEXT:   CALLpcrel32 @trivial_callee, csr_32, implicit $esp, implicit $ssp358  ; X86-NEXT:   ADJCALLSTACKUP32 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp359  ; X86-NEXT:   RET 0360  ;361  ; X64-LABEL: name: test_trivial_call362  ; X64: bb.1 (%ir-block.0):363  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp364  ; X64-NEXT:   CALL64pcrel32 @trivial_callee, csr_64, implicit $rsp, implicit $ssp365  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp366  ; X64-NEXT:   RET 0367  call void @trivial_callee()368  ret void369}370 371declare void @simple_arg_callee(i32 %in0, i32 %in1)372define void @test_simple_arg(i32 %in0, i32 %in1) {373  ; X86-LABEL: name: test_simple_arg374  ; X86: bb.1 (%ir-block.0):375  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1376  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.1, align 16)377  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0378  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (s32) from %fixed-stack.0)379  ; X86-NEXT:   ADJCALLSTACKDOWN32 8, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp380  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp381  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0382  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)383  ; X86-NEXT:   G_STORE [[LOAD1]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 1)384  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $esp385  ; X86-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 4386  ; X86-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s32)387  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD1]](p0) :: (store (s32) into stack + 4, align 1)388  ; X86-NEXT:   CALLpcrel32 @simple_arg_callee, csr_32, implicit $esp, implicit $ssp389  ; X86-NEXT:   ADJCALLSTACKUP32 8, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp390  ; X86-NEXT:   RET 0391  ;392  ; X64-LABEL: name: test_simple_arg393  ; X64: bb.1 (%ir-block.0):394  ; X64-NEXT:   liveins: $edi, $esi395  ; X64-NEXT: {{  $}}396  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi397  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $esi398  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp399  ; X64-NEXT:   $edi = COPY [[COPY1]](s32)400  ; X64-NEXT:   $esi = COPY [[COPY]](s32)401  ; X64-NEXT:   CALL64pcrel32 @simple_arg_callee, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit $esi402  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp403  ; X64-NEXT:   RET 0404  call void @simple_arg_callee(i32 %in1, i32 %in0)405  ret void406}407 408declare void @simple_arg8_callee(i32 %arg1, i32 %arg2, i32 %arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7, i32 %arg8)409define void @test_simple_arg8_call(i32 %in0) {410  ; X86-LABEL: name: test_simple_arg8_call411  ; X86: bb.1 (%ir-block.0):412  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0413  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.0, align 16)414  ; X86-NEXT:   ADJCALLSTACKDOWN32 32, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp415  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp416  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0417  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)418  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 1)419  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $esp420  ; X86-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 4421  ; X86-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s32)422  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD1]](p0) :: (store (s32) into stack + 4, align 1)423  ; X86-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $esp424  ; X86-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 8425  ; X86-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C2]](s32)426  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD2]](p0) :: (store (s32) into stack + 8, align 1)427  ; X86-NEXT:   [[COPY3:%[0-9]+]]:_(p0) = COPY $esp428  ; X86-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 12429  ; X86-NEXT:   [[PTR_ADD3:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY3]], [[C3]](s32)430  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD3]](p0) :: (store (s32) into stack + 12, align 1)431  ; X86-NEXT:   [[COPY4:%[0-9]+]]:_(p0) = COPY $esp432  ; X86-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 16433  ; X86-NEXT:   [[PTR_ADD4:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY4]], [[C4]](s32)434  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD4]](p0) :: (store (s32) into stack + 16, align 1)435  ; X86-NEXT:   [[COPY5:%[0-9]+]]:_(p0) = COPY $esp436  ; X86-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_CONSTANT i32 20437  ; X86-NEXT:   [[PTR_ADD5:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY5]], [[C5]](s32)438  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD5]](p0) :: (store (s32) into stack + 20, align 1)439  ; X86-NEXT:   [[COPY6:%[0-9]+]]:_(p0) = COPY $esp440  ; X86-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 24441  ; X86-NEXT:   [[PTR_ADD6:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY6]], [[C6]](s32)442  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD6]](p0) :: (store (s32) into stack + 24, align 1)443  ; X86-NEXT:   [[COPY7:%[0-9]+]]:_(p0) = COPY $esp444  ; X86-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_CONSTANT i32 28445  ; X86-NEXT:   [[PTR_ADD7:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY7]], [[C7]](s32)446  ; X86-NEXT:   G_STORE [[LOAD]](s32), [[PTR_ADD7]](p0) :: (store (s32) into stack + 28, align 1)447  ; X86-NEXT:   CALLpcrel32 @simple_arg8_callee, csr_32, implicit $esp, implicit $ssp448  ; X86-NEXT:   ADJCALLSTACKUP32 32, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp449  ; X86-NEXT:   RET 0450  ;451  ; X64-LABEL: name: test_simple_arg8_call452  ; X64: bb.1 (%ir-block.0):453  ; X64-NEXT:   liveins: $edi454  ; X64-NEXT: {{  $}}455  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $edi456  ; X64-NEXT:   ADJCALLSTACKDOWN64 16, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp457  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $rsp458  ; X64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0459  ; X64-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C]](s64)460  ; X64-NEXT:   G_STORE [[COPY]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 1)461  ; X64-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $rsp462  ; X64-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8463  ; X64-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C1]](s64)464  ; X64-NEXT:   G_STORE [[COPY]](s32), [[PTR_ADD1]](p0) :: (store (s32) into stack + 8, align 1)465  ; X64-NEXT:   $edi = COPY [[COPY]](s32)466  ; X64-NEXT:   $esi = COPY [[COPY]](s32)467  ; X64-NEXT:   $edx = COPY [[COPY]](s32)468  ; X64-NEXT:   $ecx = COPY [[COPY]](s32)469  ; X64-NEXT:   $r8d = COPY [[COPY]](s32)470  ; X64-NEXT:   $r9d = COPY [[COPY]](s32)471  ; X64-NEXT:   CALL64pcrel32 @simple_arg8_callee, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit $esi, implicit $edx, implicit $ecx, implicit $r8d, implicit $r9d472  ; X64-NEXT:   ADJCALLSTACKUP64 16, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp473  ; X64-NEXT:   RET 0474  call void @simple_arg8_callee(i32 %in0, i32 %in0, i32 %in0, i32 %in0,i32 %in0, i32 %in0, i32 %in0, i32 %in0)475  ret void476}477 478declare i32 @simple_return_callee(i32 %in0)479define i32 @test_simple_return_callee() {480  ; X86-LABEL: name: test_simple_return_callee481  ; X86: bb.1 (%ir-block.0):482  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5483  ; X86-NEXT:   ADJCALLSTACKDOWN32 4, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp484  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp485  ; X86-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0486  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s32)487  ; X86-NEXT:   G_STORE [[C]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 1)488  ; X86-NEXT:   CALLpcrel32 @simple_return_callee, csr_32, implicit $esp, implicit $ssp, implicit-def $eax489  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $eax490  ; X86-NEXT:   ADJCALLSTACKUP32 4, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp491  ; X86-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY1]], [[COPY1]]492  ; X86-NEXT:   $eax = COPY [[ADD]](s32)493  ; X86-NEXT:   RET 0, implicit $eax494  ;495  ; X64-LABEL: name: test_simple_return_callee496  ; X64: bb.1 (%ir-block.0):497  ; X64-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5498  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp499  ; X64-NEXT:   $edi = COPY [[C]](s32)500  ; X64-NEXT:   CALL64pcrel32 @simple_return_callee, csr_64, implicit $rsp, implicit $ssp, implicit $edi, implicit-def $eax501  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $eax502  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp503  ; X64-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[COPY]]504  ; X64-NEXT:   $eax = COPY [[ADD]](s32)505  ; X64-NEXT:   RET 0, implicit $eax506  %call = call i32 @simple_return_callee(i32 5)507  %r = add i32 %call, %call508  ret i32 %r509}510 511declare <8 x i32> @split_return_callee(<8 x i32> %in0)512define <8 x i32> @test_split_return_callee(<8 x i32> %arg1, <8 x i32> %arg2) {513  ; X86-LABEL: name: test_split_return_callee514  ; X86: bb.1 (%ir-block.0):515  ; X86-NEXT:   liveins: $xmm0, $xmm1, $xmm2516  ; X86-NEXT: {{  $}}517  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0518  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1519  ; X86-NEXT:   [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)520  ; X86-NEXT:   [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $xmm2521  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0522  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(<4 x s32>) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (<4 x s32>) from %fixed-stack.0)523  ; X86-NEXT:   [[CONCAT_VECTORS1:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY2]](<4 x s32>), [[LOAD]](<4 x s32>)524  ; X86-NEXT:   ADJCALLSTACKDOWN32 0, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp525  ; X86-NEXT:   [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<8 x s32>)526  ; X86-NEXT:   $xmm0 = COPY [[UV]](<4 x s32>)527  ; X86-NEXT:   $xmm1 = COPY [[UV1]](<4 x s32>)528  ; X86-NEXT:   CALLpcrel32 @split_return_callee, csr_32, implicit $esp, implicit $ssp, implicit $xmm0, implicit $xmm1, implicit-def $xmm0, implicit-def $xmm1529  ; X86-NEXT:   [[COPY3:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0530  ; X86-NEXT:   [[COPY4:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1531  ; X86-NEXT:   [[CONCAT_VECTORS2:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY3]](<4 x s32>), [[COPY4]](<4 x s32>)532  ; X86-NEXT:   ADJCALLSTACKUP32 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp533  ; X86-NEXT:   [[ADD:%[0-9]+]]:_(<8 x s32>) = G_ADD [[CONCAT_VECTORS]], [[CONCAT_VECTORS2]]534  ; X86-NEXT:   [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[ADD]](<8 x s32>)535  ; X86-NEXT:   $xmm0 = COPY [[UV2]](<4 x s32>)536  ; X86-NEXT:   $xmm1 = COPY [[UV3]](<4 x s32>)537  ; X86-NEXT:   RET 0, implicit $xmm0, implicit $xmm1538  ;539  ; X64-LABEL: name: test_split_return_callee540  ; X64: bb.1 (%ir-block.0):541  ; X64-NEXT:   liveins: $xmm0, $xmm1, $xmm2, $xmm3542  ; X64-NEXT: {{  $}}543  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0544  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1545  ; X64-NEXT:   [[CONCAT_VECTORS:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>)546  ; X64-NEXT:   [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $xmm2547  ; X64-NEXT:   [[COPY3:%[0-9]+]]:_(<4 x s32>) = COPY $xmm3548  ; X64-NEXT:   [[CONCAT_VECTORS1:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY2]](<4 x s32>), [[COPY3]](<4 x s32>)549  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp550  ; X64-NEXT:   [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<8 x s32>)551  ; X64-NEXT:   $xmm0 = COPY [[UV]](<4 x s32>)552  ; X64-NEXT:   $xmm1 = COPY [[UV1]](<4 x s32>)553  ; X64-NEXT:   CALL64pcrel32 @split_return_callee, csr_64, implicit $rsp, implicit $ssp, implicit $xmm0, implicit $xmm1, implicit-def $xmm0, implicit-def $xmm1554  ; X64-NEXT:   [[COPY4:%[0-9]+]]:_(<4 x s32>) = COPY $xmm0555  ; X64-NEXT:   [[COPY5:%[0-9]+]]:_(<4 x s32>) = COPY $xmm1556  ; X64-NEXT:   [[CONCAT_VECTORS2:%[0-9]+]]:_(<8 x s32>) = G_CONCAT_VECTORS [[COPY4]](<4 x s32>), [[COPY5]](<4 x s32>)557  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp558  ; X64-NEXT:   [[ADD:%[0-9]+]]:_(<8 x s32>) = G_ADD [[CONCAT_VECTORS]], [[CONCAT_VECTORS2]]559  ; X64-NEXT:   [[UV2:%[0-9]+]]:_(<4 x s32>), [[UV3:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[ADD]](<8 x s32>)560  ; X64-NEXT:   $xmm0 = COPY [[UV2]](<4 x s32>)561  ; X64-NEXT:   $xmm1 = COPY [[UV3]](<4 x s32>)562  ; X64-NEXT:   RET 0, implicit $xmm0, implicit $xmm1563  %call = call <8 x i32> @split_return_callee(<8 x i32> %arg2)564  %r = add <8 x i32> %arg1, %call565  ret  <8 x i32> %r566}567 568define void @test_indirect_call(ptr %func) {569  ; X86-LABEL: name: test_indirect_call570  ; X86: bb.1 (%ir-block.0):571  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0572  ; X86-NEXT:   [[LOAD:%[0-9]+]]:gr32(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (p0) from %fixed-stack.0, align 16)573  ; X86-NEXT:   ADJCALLSTACKDOWN32 0, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp574  ; X86-NEXT:   CALL32r [[LOAD]](p0), csr_32, implicit $esp, implicit $ssp575  ; X86-NEXT:   ADJCALLSTACKUP32 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp576  ; X86-NEXT:   RET 0577  ;578  ; X64-LABEL: name: test_indirect_call579  ; X64: bb.1 (%ir-block.0):580  ; X64-NEXT:   liveins: $rdi581  ; X64-NEXT: {{  $}}582  ; X64-NEXT:   [[COPY:%[0-9]+]]:gr64(p0) = COPY $rdi583  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp584  ; X64-NEXT:   CALL64r [[COPY]](p0), csr_64, implicit $rsp, implicit $ssp585  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp586  ; X64-NEXT:   RET 0587  call void %func()588  ret void589}590 591 592declare void @take_char(i8)593define void @test_abi_exts_call(ptr %addr) {594  ; X86-LABEL: name: test_abi_exts_call595  ; X86: bb.1 (%ir-block.0):596  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0597  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (p0) from %fixed-stack.0, align 16)598  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[LOAD]](p0) :: (load (s8) from %ir.addr)599  ; X86-NEXT:   ADJCALLSTACKDOWN32 4, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp600  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp601  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0602  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)603  ; X86-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD1]](s8)604  ; X86-NEXT:   G_STORE [[ANYEXT]](s32), [[PTR_ADD]](p0) :: (store (s8) into stack)605  ; X86-NEXT:   CALLpcrel32 @take_char, csr_32, implicit $esp, implicit $ssp606  ; X86-NEXT:   ADJCALLSTACKUP32 4, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp607  ; X86-NEXT:   ADJCALLSTACKDOWN32 4, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp608  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $esp609  ; X86-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C]](s32)610  ; X86-NEXT:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[LOAD1]](s8)611  ; X86-NEXT:   G_STORE [[SEXT]](s32), [[PTR_ADD1]](p0) :: (store (s8) into stack)612  ; X86-NEXT:   CALLpcrel32 @take_char, csr_32, implicit $esp, implicit $ssp613  ; X86-NEXT:   ADJCALLSTACKUP32 4, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp614  ; X86-NEXT:   ADJCALLSTACKDOWN32 4, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp615  ; X86-NEXT:   [[COPY2:%[0-9]+]]:_(p0) = COPY $esp616  ; X86-NEXT:   [[PTR_ADD2:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C]](s32)617  ; X86-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[LOAD1]](s8)618  ; X86-NEXT:   G_STORE [[ZEXT]](s32), [[PTR_ADD2]](p0) :: (store (s8) into stack)619  ; X86-NEXT:   CALLpcrel32 @take_char, csr_32, implicit $esp, implicit $ssp620  ; X86-NEXT:   ADJCALLSTACKUP32 4, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp621  ; X86-NEXT:   RET 0622  ;623  ; X64-LABEL: name: test_abi_exts_call624  ; X64: bb.1 (%ir-block.0):625  ; X64-NEXT:   liveins: $rdi626  ; X64-NEXT: {{  $}}627  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi628  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.addr)629  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp630  ; X64-NEXT:   [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LOAD]](s8)631  ; X64-NEXT:   $edi = COPY [[ANYEXT]](s32)632  ; X64-NEXT:   CALL64pcrel32 @take_char, csr_64, implicit $rsp, implicit $ssp, implicit $edi633  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp634  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp635  ; X64-NEXT:   [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[LOAD]](s8)636  ; X64-NEXT:   $edi = COPY [[SEXT]](s32)637  ; X64-NEXT:   CALL64pcrel32 @take_char, csr_64, implicit $rsp, implicit $ssp, implicit $edi638  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp639  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp640  ; X64-NEXT:   [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[LOAD]](s8)641  ; X64-NEXT:   $edi = COPY [[ZEXT]](s32)642  ; X64-NEXT:   CALL64pcrel32 @take_char, csr_64, implicit $rsp, implicit $ssp, implicit $edi643  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp644  ; X64-NEXT:   RET 0645  %val = load i8, ptr %addr646  call void @take_char(i8 %val)647  call void @take_char(i8 signext %val)648  call void @take_char(i8 zeroext %val)649  ret void650}651 652declare void @variadic_callee(ptr, ...)653define void @test_variadic_call_1(ptr %addr_ptr, ptr %val_ptr) {654  ; X86-LABEL: name: test_variadic_call_1655  ; X86: bb.1 (%ir-block.0):656  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1657  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (p0) from %fixed-stack.1, align 16)658  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0659  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (p0) from %fixed-stack.0)660  ; X86-NEXT:   [[LOAD2:%[0-9]+]]:_(p0) = G_LOAD [[LOAD]](p0) :: (load (p0) from %ir.addr_ptr)661  ; X86-NEXT:   [[LOAD3:%[0-9]+]]:_(s32) = G_LOAD [[LOAD1]](p0) :: (load (s32) from %ir.val_ptr)662  ; X86-NEXT:   ADJCALLSTACKDOWN32 8, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp663  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp664  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0665  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)666  ; X86-NEXT:   G_STORE [[LOAD2]](p0), [[PTR_ADD]](p0) :: (store (p0) into stack, align 1)667  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $esp668  ; X86-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 4669  ; X86-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s32)670  ; X86-NEXT:   G_STORE [[LOAD3]](s32), [[PTR_ADD1]](p0) :: (store (s32) into stack + 4, align 1)671  ; X86-NEXT:   CALLpcrel32 @variadic_callee, csr_32, implicit $esp, implicit $ssp672  ; X86-NEXT:   ADJCALLSTACKUP32 8, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp673  ; X86-NEXT:   RET 0674  ;675  ; X64-LABEL: name: test_variadic_call_1676  ; X64: bb.1 (%ir-block.0):677  ; X64-NEXT:   liveins: $rdi, $rsi678  ; X64-NEXT: {{  $}}679  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi680  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $rsi681  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0) from %ir.addr_ptr)682  ; X64-NEXT:   [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[COPY1]](p0) :: (load (s32) from %ir.val_ptr)683  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp684  ; X64-NEXT:   $rdi = COPY [[LOAD]](p0)685  ; X64-NEXT:   $esi = COPY [[LOAD1]](s32)686  ; X64-NEXT:   $al = MOV8ri 0687  ; X64-NEXT:   CALL64pcrel32 @variadic_callee, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit $esi, implicit $al688  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp689  ; X64-NEXT:   RET 0690  %addr = load ptr, ptr %addr_ptr691  %val = load i32, ptr %val_ptr692  call void (ptr, ...) @variadic_callee(ptr %addr, i32 %val)693  ret void694}695 696define void @test_variadic_call_2(ptr %addr_ptr, ptr %val_ptr) {697  ; X86-LABEL: name: test_variadic_call_2698  ; X86: bb.1 (%ir-block.0):699  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1700  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (p0) from %fixed-stack.1, align 16)701  ; X86-NEXT:   [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0702  ; X86-NEXT:   [[LOAD1:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load (p0) from %fixed-stack.0)703  ; X86-NEXT:   [[LOAD2:%[0-9]+]]:_(p0) = G_LOAD [[LOAD]](p0) :: (load (p0) from %ir.addr_ptr)704  ; X86-NEXT:   [[LOAD3:%[0-9]+]]:_(s64) = G_LOAD [[LOAD1]](p0) :: (load (s64) from %ir.val_ptr, align 4)705  ; X86-NEXT:   ADJCALLSTACKDOWN32 12, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp706  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp707  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0708  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s32)709  ; X86-NEXT:   G_STORE [[LOAD2]](p0), [[PTR_ADD]](p0) :: (store (p0) into stack, align 1)710  ; X86-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $esp711  ; X86-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 4712  ; X86-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY1]], [[C1]](s32)713  ; X86-NEXT:   G_STORE [[LOAD3]](s64), [[PTR_ADD1]](p0) :: (store (s64) into stack + 4, align 1)714  ; X86-NEXT:   CALLpcrel32 @variadic_callee, csr_32, implicit $esp, implicit $ssp715  ; X86-NEXT:   ADJCALLSTACKUP32 12, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp716  ; X86-NEXT:   RET 0717  ;718  ; X64-LABEL: name: test_variadic_call_2719  ; X64: bb.1 (%ir-block.0):720  ; X64-NEXT:   liveins: $rdi, $rsi721  ; X64-NEXT: {{  $}}722  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi723  ; X64-NEXT:   [[COPY1:%[0-9]+]]:_(p0) = COPY $rsi724  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY]](p0) :: (load (p0) from %ir.addr_ptr)725  ; X64-NEXT:   [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[COPY1]](p0) :: (load (s64) from %ir.val_ptr)726  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp727  ; X64-NEXT:   $rdi = COPY [[LOAD]](p0)728  ; X64-NEXT:   $xmm0 = COPY [[LOAD1]](s64)729  ; X64-NEXT:   $al = MOV8ri 1730  ; X64-NEXT:   CALL64pcrel32 @variadic_callee, csr_64, implicit $rsp, implicit $ssp, implicit $rdi, implicit $xmm0, implicit $al731  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp732  ; X64-NEXT:   RET 0733  %addr = load ptr, ptr %addr_ptr734  %val = load double, ptr %val_ptr735  call void (ptr, ...) @variadic_callee(ptr %addr, double %val)736  ret void737}738 739; Return value is in memory unless subtarget is AVX or higher.740define <32 x float> @test_return_v32f32() {741  ; X86-LABEL: name: test_return_v32f32742  ; X86: bb.1 (%ir-block.0):743  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0744  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load (s32) from %fixed-stack.0, align 16)745  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00746  ; 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)747  ; X86-NEXT:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[LOAD]](p0) :: (store (<32 x s32>))748  ; X86-NEXT:   $eax = COPY [[LOAD]](p0)749  ; X86-NEXT:   RET 0, $eax750  ;751  ; X64-LABEL: name: test_return_v32f32752  ; X64: bb.1 (%ir-block.0):753  ; X64-NEXT:   liveins: $rdi754  ; X64-NEXT: {{  $}}755  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi756  ; X64-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00757  ; 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)758  ; X64-NEXT:   G_STORE [[BUILD_VECTOR]](<32 x s32>), [[COPY]](p0) :: (store (<32 x s32>))759  ; X64-NEXT:   $rax = COPY [[COPY]](p0)760  ; X64-NEXT:   RET 0, $rax761  ret <32 x float> zeroinitializer762}763 764define float @test_call_v32f32() {765  ; X86-LABEL: name: test_call_v32f32766  ; X86: bb.1 (%ir-block.0):767  ; X86-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7768  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0769  ; X86-NEXT:   ADJCALLSTACKDOWN32 4, 0, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp770  ; X86-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $esp771  ; X86-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0772  ; X86-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s32)773  ; X86-NEXT:   G_STORE [[FRAME_INDEX]](p0), [[PTR_ADD]](p0) :: (store (p0) into stack, align 1)774  ; X86-NEXT:   CALLpcrel32 @test_return_v32f32, csr_32, implicit $esp, implicit $ssp775  ; X86-NEXT:   ADJCALLSTACKUP32 4, 0, implicit-def $esp, implicit-def $eflags, implicit-def $ssp, implicit $esp, implicit $ssp776  ; X86-NEXT:   [[LOAD:%[0-9]+]]:_(<32 x s32>) = G_LOAD [[FRAME_INDEX]](p0) :: (load (<32 x s32>) from %stack.0)777  ; X86-NEXT:   [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[LOAD]](<32 x s32>), [[C]](s32)778  ; X86-NEXT:   $fp0 = COPY [[EVEC]](s32)779  ; X86-NEXT:   RET 0, implicit $fp0780  ;781  ; X64-LABEL: name: test_call_v32f32782  ; X64: bb.1 (%ir-block.0):783  ; X64-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 7784  ; X64-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0785  ; X64-NEXT:   ADJCALLSTACKDOWN64 0, 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp786  ; X64-NEXT:   $rdi = COPY [[FRAME_INDEX]](p0)787  ; X64-NEXT:   CALL64pcrel32 @test_return_v32f32, csr_64, implicit $rsp, implicit $ssp, implicit $rdi788  ; X64-NEXT:   ADJCALLSTACKUP64 0, 0, implicit-def $rsp, implicit-def $eflags, implicit-def $ssp, implicit $rsp, implicit $ssp789  ; X64-NEXT:   [[LOAD:%[0-9]+]]:_(<32 x s32>) = G_LOAD [[FRAME_INDEX]](p0) :: (load (<32 x s32>) from %stack.0)790  ; X64-NEXT:   [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[LOAD]](<32 x s32>), [[C]](s64)791  ; X64-NEXT:   $xmm0 = COPY [[EVEC]](s32)792  ; X64-NEXT:   RET 0, implicit $xmm0793  %vect = call <32 x float> @test_return_v32f32()794  %elt = extractelement <32 x float> %vect, i32 7795  ret float %elt796}797 798define void @test_sret(ptr sret(%struct.all) align 8 %result) #0 {799  ; X86-LABEL: name: test_sret800  ; X86: bb.1.entry:801  ; X86-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0802  ; 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 104804  ; 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, $eax808  ;809  ; X64-LABEL: name: test_sret810  ; X64: bb.1.entry:811  ; X64-NEXT:   liveins: $rdi812  ; X64-NEXT: {{  $}}813  ; X64-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $rdi814  ; X64-NEXT:   [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 104815  ; 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, $rax819entry:820  %c = getelementptr inbounds %struct.all, ptr %result, i32 0, i32 0821  store i8 104, ptr %c, align 8822  ret void823}824