xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-vec-arg-spills.ll (revision 69b056d5638bbe3c8098b5d3a4980eb9929b9bbe)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=+altivec \
3; RUN:     -vec-extabi -mtriple powerpc-ibm-aix-xcoff < %s | \
4; RUN:   FileCheck %s --check-prefix=32BIT
5
6; RUN: llc -verify-machineinstrs -mcpu=pwr7 -mattr=+altivec \
7; RUN:     -vec-extabi -mtriple powerpc64-ibm-aix-xcoff < %s | \
8; RUN:   FileCheck %s --check-prefix=64BIT
9%struct.Test = type { double, double, double, double }
10
11@__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
12
13define double @caller() {
14; 32BIT-LABEL: caller:
15; 32BIT:       # %bb.0: # %entry
16; 32BIT-NEXT:    mflr 0
17; 32BIT-NEXT:    stwu 1, -192(1)
18; 32BIT-NEXT:    lis 4, 16392
19; 32BIT-NEXT:    stw 0, 200(1)
20; 32BIT-NEXT:    li 3, 0
21; 32BIT-NEXT:    xxlxor 0, 0, 0
22; 32BIT-NEXT:    xxlxor 1, 1, 1
23; 32BIT-NEXT:    stw 4, 180(1)
24; 32BIT-NEXT:    lis 4, 16384
25; 32BIT-NEXT:    stw 3, 184(1)
26; 32BIT-NEXT:    stw 3, 176(1)
27; 32BIT-NEXT:    stw 4, 172(1)
28; 32BIT-NEXT:    lis 4, 16368
29; 32BIT-NEXT:    stw 3, 168(1)
30; 32BIT-NEXT:    stw 3, 160(1)
31; 32BIT-NEXT:    stw 4, 164(1)
32; 32BIT-NEXT:    stw 3, 156(1)
33; 32BIT-NEXT:    li 3, 136
34; 32BIT-NEXT:    li 4, 120
35; 32BIT-NEXT:    xxlxor 2, 2, 2
36; 32BIT-NEXT:    stxvw4x 0, 1, 3
37; 32BIT-NEXT:    li 3, 104
38; 32BIT-NEXT:    stxvw4x 0, 1, 4
39; 32BIT-NEXT:    li 4, 88
40; 32BIT-NEXT:    stxvw4x 0, 1, 3
41; 32BIT-NEXT:    stxvw4x 0, 1, 4
42; 32BIT-NEXT:    lwz 4, L..C0(2) # %const.0
43; 32BIT-NEXT:    li 3, 72
44; 32BIT-NEXT:    stxvw4x 0, 1, 3
45; 32BIT-NEXT:    li 3, 48
46; 32BIT-NEXT:    xxlxor 34, 34, 34
47; 32BIT-NEXT:    xxlxor 35, 35, 35
48; 32BIT-NEXT:    lxvd2x 0, 0, 4
49; 32BIT-NEXT:    li 4, 512
50; 32BIT-NEXT:    xxlxor 36, 36, 36
51; 32BIT-NEXT:    xxlxor 37, 37, 37
52; 32BIT-NEXT:    xxlxor 38, 38, 38
53; 32BIT-NEXT:    xxlxor 39, 39, 39
54; 32BIT-NEXT:    xxlxor 40, 40, 40
55; 32BIT-NEXT:    xxlxor 41, 41, 41
56; 32BIT-NEXT:    xxlxor 42, 42, 42
57; 32BIT-NEXT:    stxvd2x 0, 1, 3
58; 32BIT-NEXT:    stw 4, 152(1)
59; 32BIT-NEXT:    li 3, 128
60; 32BIT-NEXT:    li 4, 256
61; 32BIT-NEXT:    xxlxor 43, 43, 43
62; 32BIT-NEXT:    xxlxor 44, 44, 44
63; 32BIT-NEXT:    xxlxor 45, 45, 45
64; 32BIT-NEXT:    xxlxor 3, 3, 3
65; 32BIT-NEXT:    xxlxor 4, 4, 4
66; 32BIT-NEXT:    xxlxor 5, 5, 5
67; 32BIT-NEXT:    xxlxor 6, 6, 6
68; 32BIT-NEXT:    xxlxor 7, 7, 7
69; 32BIT-NEXT:    xxlxor 8, 8, 8
70; 32BIT-NEXT:    xxlxor 9, 9, 9
71; 32BIT-NEXT:    xxlxor 10, 10, 10
72; 32BIT-NEXT:    xxlxor 11, 11, 11
73; 32BIT-NEXT:    xxlxor 12, 12, 12
74; 32BIT-NEXT:    xxlxor 13, 13, 13
75; 32BIT-NEXT:    bl .callee[PR]
76; 32BIT-NEXT:    nop
77; 32BIT-NEXT:    addi 1, 1, 192
78; 32BIT-NEXT:    lwz 0, 8(1)
79; 32BIT-NEXT:    mtlr 0
80; 32BIT-NEXT:    blr
81;
82; 64BIT-LABEL: caller:
83; 64BIT:       # %bb.0: # %entry
84; 64BIT-NEXT:    mflr 0
85; 64BIT-NEXT:    stdu 1, -224(1)
86; 64BIT-NEXT:    li 3, 2049
87; 64BIT-NEXT:    std 0, 240(1)
88; 64BIT-NEXT:    li 4, 1
89; 64BIT-NEXT:    xxlxor 0, 0, 0
90; 64BIT-NEXT:    xxlxor 1, 1, 1
91; 64BIT-NEXT:    rldic 3, 3, 51, 1
92; 64BIT-NEXT:    rldic 4, 4, 62, 1
93; 64BIT-NEXT:    xxlxor 2, 2, 2
94; 64BIT-NEXT:    xxlxor 34, 34, 34
95; 64BIT-NEXT:    std 3, 216(1)
96; 64BIT-NEXT:    li 3, 1023
97; 64BIT-NEXT:    std 4, 208(1)
98; 64BIT-NEXT:    li 4, 0
99; 64BIT-NEXT:    xxlxor 35, 35, 35
100; 64BIT-NEXT:    xxlxor 36, 36, 36
101; 64BIT-NEXT:    rldic 3, 3, 52, 2
102; 64BIT-NEXT:    std 4, 192(1)
103; 64BIT-NEXT:    xxlxor 37, 37, 37
104; 64BIT-NEXT:    xxlxor 38, 38, 38
105; 64BIT-NEXT:    xxlxor 39, 39, 39
106; 64BIT-NEXT:    std 3, 200(1)
107; 64BIT-NEXT:    li 3, 160
108; 64BIT-NEXT:    xxlxor 40, 40, 40
109; 64BIT-NEXT:    stxvw4x 0, 1, 3
110; 64BIT-NEXT:    li 3, 144
111; 64BIT-NEXT:    xxlxor 41, 41, 41
112; 64BIT-NEXT:    xxlxor 42, 42, 42
113; 64BIT-NEXT:    stxvw4x 0, 1, 3
114; 64BIT-NEXT:    li 3, 128
115; 64BIT-NEXT:    xxlxor 43, 43, 43
116; 64BIT-NEXT:    stxvw4x 0, 1, 3
117; 64BIT-NEXT:    ld 3, L..C0(2) # %const.0
118; 64BIT-NEXT:    xxlxor 44, 44, 44
119; 64BIT-NEXT:    xxlxor 45, 45, 45
120; 64BIT-NEXT:    lxvd2x 0, 0, 3
121; 64BIT-NEXT:    li 3, 80
122; 64BIT-NEXT:    xxlxor 3, 3, 3
123; 64BIT-NEXT:    xxlxor 4, 4, 4
124; 64BIT-NEXT:    xxlxor 5, 5, 5
125; 64BIT-NEXT:    stxvd2x 0, 1, 3
126; 64BIT-NEXT:    li 3, 512
127; 64BIT-NEXT:    std 4, 176(1)
128; 64BIT-NEXT:    li 4, 256
129; 64BIT-NEXT:    xxlxor 6, 6, 6
130; 64BIT-NEXT:    xxlxor 7, 7, 7
131; 64BIT-NEXT:    xxlxor 8, 8, 8
132; 64BIT-NEXT:    std 3, 184(1)
133; 64BIT-NEXT:    li 3, 128
134; 64BIT-NEXT:    xxlxor 9, 9, 9
135; 64BIT-NEXT:    xxlxor 10, 10, 10
136; 64BIT-NEXT:    xxlxor 11, 11, 11
137; 64BIT-NEXT:    xxlxor 12, 12, 12
138; 64BIT-NEXT:    xxlxor 13, 13, 13
139; 64BIT-NEXT:    bl .callee[PR]
140; 64BIT-NEXT:    nop
141; 64BIT-NEXT:    addi 1, 1, 224
142; 64BIT-NEXT:    ld 0, 16(1)
143; 64BIT-NEXT:    mtlr 0
144; 64BIT-NEXT:    blr
145
146  entry:
147    %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, ptr nonnull byval(%struct.Test) align 4 @__const.caller.t)
148      ret double %call
149}
150
151declare 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, ptr byval(%struct.Test) align 8)
152