115 lines · plain
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s2 3declare i32 @sample_add(i32, i32)4declare i32 @stack_callee_int(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32)5declare i32 @stack_callee_int_szext(i1 signext, i8 zeroext, i32, i32, i32, i32, i32, i32, i16 zeroext, i8 signext)6declare float @stack_callee_float(float, float, float, float, float, float, float, float, float, float)7declare void @test(i64)8 9define i32 @sample_call() {10; CHECK-LABEL: sample_call:11; CHECK: .LBB{{[0-9]+}}_2:12; CHECK-NEXT: lea %s0, sample_add@lo13; CHECK-NEXT: and %s0, %s0, (32)014; CHECK-NEXT: lea.sl %s12, sample_add@hi(, %s0)15; CHECK-NEXT: or %s0, 1, (0)116; CHECK-NEXT: or %s1, 2, (0)117; CHECK-NEXT: bsic %s10, (, %s12)18; CHECK-NEXT: or %s11, 0, %s919 %r = tail call i32 @sample_add(i32 1, i32 2)20 ret i32 %r21}22 23define i32 @stack_call_int() {24; CHECK-LABEL: stack_call_int:25; CHECK: .LBB{{[0-9]+}}_2:26; CHECK-NEXT: or %s0, 10, (0)127; CHECK-NEXT: st %s0, 248(, %s11)28; CHECK-NEXT: or %s34, 9, (0)129; CHECK-NEXT: lea %s0, stack_callee_int@lo30; CHECK-NEXT: and %s0, %s0, (32)031; CHECK-NEXT: lea.sl %s12, stack_callee_int@hi(, %s0)32; CHECK-NEXT: or %s0, 1, (0)133; CHECK-NEXT: or %s1, 2, (0)134; CHECK-NEXT: or %s2, 3, (0)135; CHECK-NEXT: or %s3, 4, (0)136; CHECK-NEXT: or %s4, 5, (0)137; CHECK-NEXT: or %s5, 6, (0)138; CHECK-NEXT: or %s6, 7, (0)139; CHECK-NEXT: or %s7, 8, (0)140; CHECK-NEXT: st %s34, 240(, %s11)41; CHECK-NEXT: bsic %s10, (, %s12)42; CHECK-NEXT: or %s11, 0, %s943 %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)44 ret i32 %r45}46 47define 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)151; CHECK-NEXT: st %s0, 248(, %s11)52; CHECK-NEXT: lea %s34, 6553553; CHECK-NEXT: lea %s0, stack_callee_int_szext@lo54; CHECK-NEXT: and %s0, %s0, (32)055; CHECK-NEXT: lea.sl %s12, stack_callee_int_szext@hi(, %s0)56; CHECK-NEXT: or %s0, -1, (0)157; CHECK-NEXT: lea %s1, 25558; CHECK-NEXT: or %s2, 3, (0)159; CHECK-NEXT: or %s3, 4, (0)160; CHECK-NEXT: or %s4, 5, (0)161; CHECK-NEXT: or %s5, 6, (0)162; CHECK-NEXT: or %s6, 7, (0)163; CHECK-NEXT: or %s7, 8, (0)164; CHECK-NEXT: st %s34, 240(, %s11)65; CHECK-NEXT: bsic %s10, (, %s12)66; CHECK-NEXT: or %s11, 0, %s967 %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)68 ret i32 %r69}70 71define float @stack_call_float() {72; CHECK-LABEL: stack_call_float:73; CHECK: .LBB{{[0-9]+}}_2:74; CHECK-NEXT: lea.sl %s0, 109261619275; CHECK-NEXT: st %s0, 248(, %s11)76; CHECK-NEXT: lea.sl %s34, 109156761677; CHECK-NEXT: lea %s0, stack_callee_float@lo78; CHECK-NEXT: and %s0, %s0, (32)079; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s0)80; CHECK-NEXT: lea.sl %s0, 106535321681; CHECK-NEXT: lea.sl %s1, 107374182482; CHECK-NEXT: lea.sl %s2, 107793612883; CHECK-NEXT: lea.sl %s3, 108213043284; CHECK-NEXT: lea.sl %s4, 108422758485; CHECK-NEXT: lea.sl %s5, 108632473686; CHECK-NEXT: lea.sl %s6, 108842188887; CHECK-NEXT: lea.sl %s7, 109051904088; CHECK-NEXT: st %s34, 240(, %s11)89; CHECK-NEXT: bsic %s10, (, %s12)90; CHECK-NEXT: or %s11, 0, %s991 %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)92 ret float %r93}94 95define 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@lo100; CHECK-NEXT: and %s1, %s1, (32)0101; CHECK-NEXT: lea.sl %s12, stack_callee_float@hi(, %s1)102; CHECK-NEXT: st %s0, 240(, %s11)103; CHECK-NEXT: or %s1, 0, %s0104; CHECK-NEXT: or %s2, 0, %s0105; CHECK-NEXT: or %s3, 0, %s0106; CHECK-NEXT: or %s4, 0, %s0107; CHECK-NEXT: or %s5, 0, %s0108; CHECK-NEXT: or %s6, 0, %s0109; CHECK-NEXT: or %s7, 0, %s0110; CHECK-NEXT: bsic %s10, (, %s12)111; CHECK-NEXT: or %s11, 0, %s9112 %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)113 ret float %r114}115