1 ; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
3 declare i32 @sample_add(i32, i32)
4 declare i32 @stack_callee_int(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32)
5 declare i32 @stack_callee_int_szext(i1 signext, i8 zeroext, i32, i32, i32, i32, i32, i32, i16 zeroext, i8 signext)
6 declare float @stack_callee_float(float, float, float, float, float, float, float, float, float, float)
7 declare void @test(i64)
9 define i32 @sample_call() {
10 ; CHECK-LABEL: sample_call:
11 ; CHECK: .LBB{{[0-9]+}}_2:
12 ; CHECK-NEXT: lea %s0, sample_add@lo
13 ; CHECK-NEXT: and %s0, %s0, (32)0
14 ; CHECK-NEXT: lea.sl %s12, sample_add@hi(, %s0)
15 ; CHECK-NEXT: or %s0, 1, (0)1
16 ; CHECK-NEXT: or %s1, 2, (0)1
17 ; CHECK-NEXT: bsic %s10, (, %s12)
18 ; CHECK-NEXT: or %s11, 0, %s9
19 %r = tail call i32 @sample_add(i32 1, i32 2)
23 define i32 @stack_call_int() {
24 ; CHECK-LABEL: stack_call_int:
25 ; CHECK: .LBB{{[0-9]+}}_2:
26 ; CHECK-NEXT: or %s0, 10, (0)1
27 ; CHECK-NEXT: st %s0, 248(, %s11)
28 ; CHECK-NEXT: or %s34, 9, (0)1
29 ; CHECK-NEXT: lea %s0, stack_callee_int@lo
30 ; CHECK-NEXT: and %s0, %s0, (32)0
31 ; CHECK-NEXT: lea.sl %s12, stack_callee_int@hi(, %s0)
32 ; CHECK-NEXT: or %s0, 1, (0)1
33 ; CHECK-NEXT: or %s1, 2, (0)1
34 ; CHECK-NEXT: or %s2, 3, (0)1
35 ; CHECK-NEXT: or %s3, 4, (0)1
36 ; CHECK-NEXT: or %s4, 5, (0)1
37 ; CHECK-NEXT: or %s5, 6, (0)1
38 ; CHECK-NEXT: or %s6, 7, (0)1
39 ; CHECK-NEXT: or %s7, 8, (0)1
40 ; CHECK-NEXT: st %s34, 240(, %s11)
41 ; CHECK-NEXT: bsic %s10, (, %s12)
42 ; CHECK-NEXT: or %s11, 0, %s9
43 %r = tail call i32 @stack_callee_int(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10)
47 define i32 @stack_call_int_szext() {
48 ; CHECK-LABEL: stack_call_int_szext:
49 ; CHECK: .LBB{{[0-9]+}}_2:
50 ; CHECK-NEXT: or %s0, -1, (0)1
51 ; CHECK-NEXT: st %s0, 248(, %s11)
52 ; CHECK-NEXT: lea %s34, 65535
53 ; CHECK-NEXT: lea %s0, stack_callee_int_szext@lo
54 ; CHECK-NEXT: and %s0, %s0, (32)0
55 ; CHECK-NEXT: lea.sl %s12, stack_callee_int_szext@hi(, %s0)
56 ; CHECK-NEXT: or %s0, -1, (0)1
57 ; CHECK-NEXT: lea %s1, 255
58 ; CHECK-NEXT: or %s2, 3, (0)1
59 ; CHECK-NEXT: or %s3, 4, (0)1
60 ; CHECK-NEXT: or %s4, 5, (0)1
61 ; CHECK-NEXT: or %s5, 6, (0)1
62 ; CHECK-NEXT: or %s6, 7, (0)1
63 ; CHECK-NEXT: or %s7, 8, (0)1
64 ; CHECK-NEXT: st %s34, 240(, %s11)
65 ; CHECK-NEXT: bsic %s10, (, %s12)
66 ; CHECK-NEXT: or %s11, 0, %s9
67 %r = tail call i32 @stack_callee_int_szext(i1 -1, i8 -1, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i16 -1, i8 -1)
71 define float @stack_call_float() {
72 ; CHECK-LABEL: stack_call_float:
73 ; CHECK: .LBB{{[0-9]+}}_2:
74 ; CHECK-NEXT: lea.sl %s0, 1092616192
75 ; CHECK-NEXT: st %s0, 248(, %s11)
76 ; CHECK-NEXT: lea.sl %s34, 1091567616
77 ; CHECK-NEXT: lea %s0, stack_callee_float@lo
78 ; CHECK-NEXT: and %s0, %s0, (32)0
79 ; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s0)
80 ; CHECK-NEXT: lea.sl %s0, 1065353216
81 ; CHECK-NEXT: lea.sl %s1, 1073741824
82 ; CHECK-NEXT: lea.sl %s2, 1077936128
83 ; CHECK-NEXT: lea.sl %s3, 1082130432
84 ; CHECK-NEXT: lea.sl %s4, 1084227584
85 ; CHECK-NEXT: lea.sl %s5, 1086324736
86 ; CHECK-NEXT: lea.sl %s6, 1088421888
87 ; CHECK-NEXT: lea.sl %s7, 1090519040
88 ; CHECK-NEXT: st %s34, 240(, %s11)
89 ; CHECK-NEXT: bsic %s10, (, %s12)
90 ; CHECK-NEXT: or %s11, 0, %s9
91 %r = tail call float @stack_callee_float(float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0, float 7.0, float 8.0, float 9.0, float 10.0)
95 define float @stack_call_float2(float %p0) {
96 ; CHECK-LABEL: stack_call_float2:
97 ; CHECK: .LBB{{[0-9]+}}_2:
98 ; CHECK-NEXT: st %s0, 248(, %s11)
99 ; CHECK-NEXT: lea %s1, stack_callee_float@lo
100 ; CHECK-NEXT: and %s1, %s1, (32)0
101 ; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s1)
102 ; CHECK-NEXT: st %s0, 240(, %s11)
103 ; CHECK-NEXT: or %s1, 0, %s0
104 ; CHECK-NEXT: or %s2, 0, %s0
105 ; CHECK-NEXT: or %s3, 0, %s0
106 ; CHECK-NEXT: or %s4, 0, %s0
107 ; CHECK-NEXT: or %s5, 0, %s0
108 ; CHECK-NEXT: or %s6, 0, %s0
109 ; CHECK-NEXT: or %s7, 0, %s0
110 ; CHECK-NEXT: bsic %s10, (, %s12)
111 ; CHECK-NEXT: or %s11, 0, %s9
112 %r = tail call float @stack_callee_float(float %p0, float %p0, float %p0, float %p0, float %p0, float %p0, float %p0, float %p0, float %p0, float %p0)