| ; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s |
| |
| declare i32 @sample_add(i32, i32) |
| declare i32 @stack_callee_int(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) |
| declare i32 @stack_callee_int_szext(i1 signext, i8 zeroext, i32, i32, i32, i32, i32, i32, i16 zeroext, i8 signext) |
| declare float @stack_callee_float(float, float, float, float, float, float, float, float, float, float) |
| declare void @test(i64) |
| |
| define i32 @sample_call() { |
| ; CHECK-LABEL: sample_call: |
| ; CHECK: .LBB{{[0-9]+}}_2: |
| ; CHECK-NEXT: lea %s0, sample_add@lo |
| ; CHECK-NEXT: and %s0, %s0, (32)0 |
| ; CHECK-NEXT: lea.sl %s12, sample_add@hi(, %s0) |
| ; CHECK-NEXT: or %s0, 1, (0)1 |
| ; CHECK-NEXT: or %s1, 2, (0)1 |
| ; CHECK-NEXT: bsic %s10, (, %s12) |
| ; CHECK-NEXT: or %s11, 0, %s9 |
| %r = tail call i32 @sample_add(i32 1, i32 2) |
| ret i32 %r |
| } |
| |
| define i32 @stack_call_int() { |
| ; CHECK-LABEL: stack_call_int: |
| ; CHECK: .LBB{{[0-9]+}}_2: |
| ; CHECK-NEXT: or %s0, 10, (0)1 |
| ; CHECK-NEXT: st %s0, 248(, %s11) |
| ; CHECK-NEXT: or %s34, 9, (0)1 |
| ; CHECK-NEXT: lea %s0, stack_callee_int@lo |
| ; CHECK-NEXT: and %s0, %s0, (32)0 |
| ; CHECK-NEXT: lea.sl %s12, stack_callee_int@hi(, %s0) |
| ; CHECK-NEXT: or %s0, 1, (0)1 |
| ; CHECK-NEXT: or %s1, 2, (0)1 |
| ; CHECK-NEXT: or %s2, 3, (0)1 |
| ; CHECK-NEXT: or %s3, 4, (0)1 |
| ; CHECK-NEXT: or %s4, 5, (0)1 |
| ; CHECK-NEXT: or %s5, 6, (0)1 |
| ; CHECK-NEXT: or %s6, 7, (0)1 |
| ; CHECK-NEXT: or %s7, 8, (0)1 |
| ; CHECK-NEXT: st %s34, 240(, %s11) |
| ; CHECK-NEXT: bsic %s10, (, %s12) |
| ; CHECK-NEXT: or %s11, 0, %s9 |
| %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) |
| ret i32 %r |
| } |
| |
| define i32 @stack_call_int_szext() { |
| ; CHECK-LABEL: stack_call_int_szext: |
| ; CHECK: .LBB{{[0-9]+}}_2: |
| ; CHECK-NEXT: or %s0, -1, (0)1 |
| ; CHECK-NEXT: st %s0, 248(, %s11) |
| ; CHECK-NEXT: lea %s34, 65535 |
| ; CHECK-NEXT: lea %s0, stack_callee_int_szext@lo |
| ; CHECK-NEXT: and %s0, %s0, (32)0 |
| ; CHECK-NEXT: lea.sl %s12, stack_callee_int_szext@hi(, %s0) |
| ; CHECK-NEXT: or %s0, -1, (0)1 |
| ; CHECK-NEXT: lea %s1, 255 |
| ; CHECK-NEXT: or %s2, 3, (0)1 |
| ; CHECK-NEXT: or %s3, 4, (0)1 |
| ; CHECK-NEXT: or %s4, 5, (0)1 |
| ; CHECK-NEXT: or %s5, 6, (0)1 |
| ; CHECK-NEXT: or %s6, 7, (0)1 |
| ; CHECK-NEXT: or %s7, 8, (0)1 |
| ; CHECK-NEXT: st %s34, 240(, %s11) |
| ; CHECK-NEXT: bsic %s10, (, %s12) |
| ; CHECK-NEXT: or %s11, 0, %s9 |
| %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) |
| ret i32 %r |
| } |
| |
| define float @stack_call_float() { |
| ; CHECK-LABEL: stack_call_float: |
| ; CHECK: .LBB{{[0-9]+}}_2: |
| ; CHECK-NEXT: lea.sl %s0, 1092616192 |
| ; CHECK-NEXT: st %s0, 248(, %s11) |
| ; CHECK-NEXT: lea.sl %s34, 1091567616 |
| ; CHECK-NEXT: lea %s0, stack_callee_float@lo |
| ; CHECK-NEXT: and %s0, %s0, (32)0 |
| ; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s0) |
| ; CHECK-NEXT: lea.sl %s0, 1065353216 |
| ; CHECK-NEXT: lea.sl %s1, 1073741824 |
| ; CHECK-NEXT: lea.sl %s2, 1077936128 |
| ; CHECK-NEXT: lea.sl %s3, 1082130432 |
| ; CHECK-NEXT: lea.sl %s4, 1084227584 |
| ; CHECK-NEXT: lea.sl %s5, 1086324736 |
| ; CHECK-NEXT: lea.sl %s6, 1088421888 |
| ; CHECK-NEXT: lea.sl %s7, 1090519040 |
| ; CHECK-NEXT: st %s34, 240(, %s11) |
| ; CHECK-NEXT: bsic %s10, (, %s12) |
| ; CHECK-NEXT: or %s11, 0, %s9 |
| %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) |
| ret float %r |
| } |
| |
| define float @stack_call_float2(float %p0) { |
| ; CHECK-LABEL: stack_call_float2: |
| ; CHECK: .LBB{{[0-9]+}}_2: |
| ; CHECK-NEXT: st %s0, 248(, %s11) |
| ; CHECK-NEXT: lea %s1, stack_callee_float@lo |
| ; CHECK-NEXT: and %s1, %s1, (32)0 |
| ; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s1) |
| ; CHECK-NEXT: st %s0, 240(, %s11) |
| ; CHECK-NEXT: or %s1, 0, %s0 |
| ; CHECK-NEXT: or %s2, 0, %s0 |
| ; CHECK-NEXT: or %s3, 0, %s0 |
| ; CHECK-NEXT: or %s4, 0, %s0 |
| ; CHECK-NEXT: or %s5, 0, %s0 |
| ; CHECK-NEXT: or %s6, 0, %s0 |
| ; CHECK-NEXT: or %s7, 0, %s0 |
| ; CHECK-NEXT: bsic %s10, (, %s12) |
| ; CHECK-NEXT: or %s11, 0, %s9 |
| %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) |
| ret float %r |
| } |