[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / PowerPC / aix-vec-arg-spills-mir.ll
blob52031e368fcad468f8a128e9378364a34c185485
1 ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=+altivec -vec-extabi \
3 ; RUN:     -stop-after=machine-cp -mtriple powerpc-ibm-aix-xcoff < %s | \
4 ; RUN:   FileCheck %s --check-prefix=MIR32
6 ; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=+altivec -vec-extabi \
7 ; RUN:     -stop-after=machine-cp -mtriple powerpc64-ibm-aix-xcoff < %s | \
8 ; RUN:   FileCheck %s --check-prefix=MIR64
10 %struct.Test = type { double, double, double, double }
12 @__const.caller.t = private unnamed_addr constant %struct.Test { double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00 }, align 8
14 define double @caller() {
16   ; MIR32-LABEL: name: caller
17   ; MIR32: bb.0.entry:
18   ; MIR32:   renamable $r3 = LWZtoc @__const.caller.t, $r2 :: (load (s32) from got)
19   ; MIR32:   renamable $r4 = LI 31
20   ; MIR32:   renamable $v2 = LVX renamable $r3, killed renamable $r4
21   ; MIR32:   renamable $r4 = LI 16
22   ; MIR32:   renamable $v3 = LVX renamable $r3, killed renamable $r4
23   ; MIR32:   renamable $v4 = LVSL $zero, renamable $r3
24   ; MIR32:   renamable $v2 = VPERM renamable $v3, killed renamable $v2, renamable $v4
25   ; MIR32:   renamable $r4 = LI 172
26   ; MIR32:   STXVW4X killed renamable $v2, $r1, killed renamable $r4 :: (store (s128) into unknown-address + 16, align 4)
27   ; MIR32:   renamable $v2 = LVX $zero, killed renamable $r3
28   ; MIR32:   renamable $v2 = VPERM killed renamable $v2, killed renamable $v3, killed renamable $v4
29   ; MIR32:   renamable $r3 = LI 156
30   ; MIR32:   STXVW4X killed renamable $v2, $r1, killed renamable $r3 :: (store (s128), align 4)
31   ; MIR32:   ADJCALLSTACKDOWN 188, 0, implicit-def dead $r1, implicit $r1
32   ; MIR32:   renamable $vsl0 = XXLXORz
33   ; MIR32:   $f1 = XXLXORdpz
34   ; MIR32:   $f2 = XXLXORdpz
35   ; MIR32:   $v2 = XXLXORz
36   ; MIR32:   $v3 = XXLXORz
37   ; MIR32:   $v4 = XXLXORz
38   ; MIR32:   $v5 = XXLXORz
39   ; MIR32:   $v6 = XXLXORz
40   ; MIR32:   $v7 = XXLXORz
41   ; MIR32:   $v8 = XXLXORz
42   ; MIR32:   $v9 = XXLXORz
43   ; MIR32:   $v10 = XXLXORz
44   ; MIR32:   $v11 = XXLXORz
45   ; MIR32:   $v12 = XXLXORz
46   ; MIR32:   $v13 = XXLXORz
47   ; MIR32:   $f3 = XXLXORdpz
48   ; MIR32:   $f4 = XXLXORdpz
49   ; MIR32:   $f5 = XXLXORdpz
50   ; MIR32:   $f6 = XXLXORdpz
51   ; MIR32:   $f7 = XXLXORdpz
52   ; MIR32:   renamable $r3 = LI 136
53   ; MIR32:   $f8 = XXLXORdpz
54   ; MIR32:   renamable $r4 = LI 120
55   ; MIR32:   renamable $r5 = LWZtoc %const.0, $r2 :: (load (s32) from got)
56   ; MIR32:   STXVW4X renamable $vsl0, $r1, killed renamable $r3 :: (store (s128), align 8)
57   ; MIR32:   $f9 = XXLXORdpz
58   ; MIR32:   renamable $r3 = LI 104
59   ; MIR32:   STXVW4X renamable $vsl0, $r1, killed renamable $r4 :: (store (s128), align 8)
60   ; MIR32:   $f10 = XXLXORdpz
61   ; MIR32:   STXVW4X renamable $vsl0, $r1, killed renamable $r3 :: (store (s128), align 8)
62   ; MIR32:   renamable $r3 = LI 88
63   ; MIR32:   $f11 = XXLXORdpz
64   ; MIR32:   STXVW4X renamable $vsl0, $r1, killed renamable $r3 :: (store (s128), align 8)
65   ; MIR32:   renamable $r3 = LI 72
66   ; MIR32:   renamable $v0 = LXVD2X $zero, killed renamable $r5 :: (load (s128) from constant-pool)
67   ; MIR32:   $f12 = XXLXORdpz
68   ; MIR32:   STXVW4X killed renamable $vsl0, $r1, killed renamable $r3 :: (store (s128), align 8)
69   ; MIR32:   $f13 = XXLXORdpz
70   ; MIR32:   renamable $r5 = LI 48
71   ; MIR32:   renamable $r6 = LI 512
72   ; MIR32:   $r3 = LI 128
73   ; MIR32:   $r4 = LI 256
74   ; MIR32:   STXVD2X killed renamable $v0, $r1, killed renamable $r5 :: (store (s128))
75   ; MIR32:   STW killed renamable $r6, 152, $r1 :: (store (s32))
76   ; MIR32:   BL_NOP <mcsymbol .callee[PR]>, csr_aix32_altivec, implicit-def dead $lr, implicit $rm, implicit $r3, implicit $r4, implicit $f1, implicit $f2, implicit $v2, implicit $v3, implicit $v4, implicit $v5, implicit killed $v6, implicit killed $v7, implicit killed $v8, implicit killed $v9, implicit killed $v10, implicit killed $v11, implicit killed $v12, implicit killed $v13, implicit $f3, implicit $f4, implicit $f5, implicit $f6, implicit $f7, implicit $f8, implicit $f9, implicit $f10, implicit $f11, implicit $f12, implicit $f13, implicit $r2, implicit-def $r1, implicit-def $f1
77   ; MIR32:   ADJCALLSTACKUP 188, 0, implicit-def dead $r1, implicit $r1
78   ; MIR32:   BLR implicit $lr, implicit $rm, implicit $f1
79   ; MIR64-LABEL: name: caller
80   ; MIR64: bb.0.entry:
81   ; MIR64:   renamable $x3 = LDtoc @__const.caller.t, $x2 :: (load (s64) from got)
82   ; MIR64:   renamable $x4 = LI8 16
83   ; MIR64:   renamable $vsl0 = LXVD2X renamable $x3, killed renamable $x4 :: (load (s128) from unknown-address + 16, align 8)
84   ; MIR64:   renamable $x4 = LI8 208
85   ; MIR64:   STXVD2X killed renamable $vsl0, $x1, killed renamable $x4 :: (store (s128) into unknown-address + 16, align 4)
86   ; MIR64:   renamable $vsl0 = LXVD2X $zero8, killed renamable $x3 :: (load (s128), align 8)
87   ; MIR64:   renamable $x3 = LI8 192
88   ; MIR64:   STXVD2X killed renamable $vsl0, $x1, killed renamable $x3 :: (store (s128), align 4)
89   ; MIR64:   ADJCALLSTACKDOWN 224, 0, implicit-def dead $r1, implicit $r1
90   ; MIR64:   renamable $vsl0 = XXLXORz
91   ; MIR64:   $f1 = XXLXORdpz
92   ; MIR64:   $f2 = XXLXORdpz
93   ; MIR64:   $v2 = XXLXORz
94   ; MIR64:   $v3 = XXLXORz
95   ; MIR64:   $v4 = XXLXORz
96   ; MIR64:   $v5 = XXLXORz
97   ; MIR64:   $v6 = XXLXORz
98   ; MIR64:   $v7 = XXLXORz
99   ; MIR64:   $v8 = XXLXORz
100   ; MIR64:   $v9 = XXLXORz
101   ; MIR64:   $v10 = XXLXORz
102   ; MIR64:   $v11 = XXLXORz
103   ; MIR64:   $v12 = XXLXORz
104   ; MIR64:   $v13 = XXLXORz
105   ; MIR64:   $f3 = XXLXORdpz
106   ; MIR64:   $f4 = XXLXORdpz
107   ; MIR64:   $f5 = XXLXORdpz
108   ; MIR64:   $f6 = XXLXORdpz
109   ; MIR64:   renamable $x3 = LDtocCPT %const.0, $x2 :: (load (s64) from got)
110   ; MIR64:   $f7 = XXLXORdpz
111   ; MIR64:   $f8 = XXLXORdpz
112   ; MIR64:   renamable $x4 = LI8 160
113   ; MIR64:   $f9 = XXLXORdpz
114   ; MIR64:   renamable $x5 = LI8 144
115   ; MIR64:   STXVW4X renamable $vsl0, $x1, killed renamable $x4 :: (store (s128), align 8)
116   ; MIR64:   renamable $vsl13 = LXVD2X $zero8, killed renamable $x3 :: (load (s128) from constant-pool)
117   ; MIR64:   $f10 = XXLXORdpz
118   ; MIR64:   renamable $x3 = LI8 128
119   ; MIR64:   STXVW4X renamable $vsl0, $x1, killed renamable $x5 :: (store (s128), align 8)
120   ; MIR64:   $f11 = XXLXORdpz
121   ; MIR64:   renamable $x4 = LI8 80
122   ; MIR64:   STXVW4X killed renamable $vsl0, $x1, killed renamable $x3 :: (store (s128), align 8)
123   ; MIR64:   $f12 = XXLXORdpz
124   ; MIR64:   STXVD2X killed renamable $vsl13, $x1, killed renamable $x4 :: (store (s128))
125   ; MIR64:   $f13 = XXLXORdpz
126   ; MIR64:   renamable $x5 = LI8 512
127   ; MIR64:   renamable $x6 = LI8 0
128   ; MIR64:   $x3 = LI8 128
129   ; MIR64:   $x4 = LI8 256
130   ; MIR64:   STD killed renamable $x5, 184, $x1 :: (store (s64))
131   ; MIR64:   STD killed renamable $x6, 176, $x1 :: (store (s64))
132   ; MIR64:   BL8_NOP <mcsymbol .callee[PR]>, csr_ppc64_altivec, implicit-def dead $lr8, implicit $rm, implicit $x3, implicit $x4, implicit $f1, implicit $f2, implicit killed $v2, implicit killed $v3, implicit killed $v4, implicit killed $v5, implicit killed $v6, implicit killed $v7, implicit killed $v8, implicit killed $v9, implicit killed $v10, implicit killed $v11, implicit killed $v12, implicit killed $v13, implicit $f3, implicit $f4, implicit $f5, implicit $f6, implicit $f7, implicit $f8, implicit $f9, implicit $f10, implicit $f11, implicit $f12, implicit $f13, implicit $x2, implicit-def $r1, implicit-def $f1
133   ; MIR64:   ADJCALLSTACKUP 224, 0, implicit-def dead $r1, implicit $r1
134   ; MIR64:   BLR8 implicit $lr8, implicit $rm, implicit $f1
135   entry:
136     %call = tail call double @callee(i32 signext 128, i32 signext 256, double 0.000000e+00, double 0.000000e+00, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 0.000000e+00, double 0.000000e+00>, <2 x double> <double 2.400000e+01, double 2.500000e+01>, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, i32 signext 512, %struct.Test* nonnull byval(%struct.Test) align 4 @__const.caller.t)
137       ret double %call
140 declare double @callee(i32 signext, i32 signext, double, double, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, double, double, double, double, double, double, double, double, double, double, double, i32 signext, %struct.Test* byval(%struct.Test) align 8)