brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · ca29e15 Raw
30 lines · plain
1; Because some arguments are passed by reference (through stack),2; the compiler should not do tail-call optimization.3; RUN: llc -mtriple=aarch64 -mattr=+sve < %s | FileCheck %s4 5; CHECK-LABEL: caller:6; CHECK:       addvl sp, sp, #-[[STACKSIZE:[0-9]+]]7; CHECK-NOT:   addvl sp8; CHECK:       bl callee9; CHECK:       addvl sp, sp, #[[STACKSIZE]]10; CHECK:       ret11define <vscale x 16 x i8> @caller(<vscale x 16 x i8> %v) {12  %1 = tail call <vscale x 16 x i8> @callee(<vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v, <vscale x 16 x i8> %v)13  ret <vscale x 16 x i8> %114}15 16declare <vscale x 16 x i8> @callee(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>)17 18; CHECK-LABEL: caller_pred:19; CHECK:       addvl sp, sp, #-[[STACKSIZE:[0-9]+]]20; CHECK-NOT:   addvl sp21; CHECK:       bl callee_pred22; CHECK:       addvl sp, sp, #[[STACKSIZE]]23; CHECK:       ret24define <vscale x 16 x i1> @caller_pred(<vscale x 16 x i1> %v) {25  %1 = tail call <vscale x 16 x i1> @callee_pred(<vscale x 16 x i1> %v, <vscale x 16 x i1> %v, <vscale x 16 x i1> %v, <vscale x 16 x i1> %v, <vscale x 16 x i1> %v)26  ret <vscale x 16 x i1> %127}28 29declare <vscale x 16 x i1> @callee_pred(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>)30