brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 69f7b1c Raw
75 lines · plain
1; RUN: llc < %s -mtriple=xcore | FileCheck %s2 3%0 = type { i32, i32, i32, i32 }4%1 = type { i32, i32, i32, i32, i32 }5 6; Structs of 4 words are returned in registers7define internal %0 @ReturnBigStruct() nounwind readnone {8entry:9  %0 = insertvalue %0 zeroinitializer, i32 12, 010  %1 = insertvalue %0 %0, i32 24, 111  %2 = insertvalue %0 %1, i32 48, 212  %3 = insertvalue %0 %2, i32 24601, 313  ret %0 %314}15; CHECK-LABEL: ReturnBigStruct:16; CHECK: ldc r0, 1217; CHECK: ldc r1, 2418; CHECK: ldc r2, 4819; CHECK: ldc r3, 2460120; CHECK: retsp 021 22; Structs of more than 4 words are partially returned in memory so long as the23; function is not variadic.24define { i32, i32, i32, i32, i32} @f(i32, i32, i32, i32, i32) nounwind readnone {25; CHECK-LABEL: f:26; CHECK: ldc [[REGISTER:r[0-9]+]], 527; CHECK-NEXT: stw [[REGISTER]], sp[2]28; CHECK-NEXT: retsp 029body:30  ret { i32, i32, i32, i32, i32} { i32 undef, i32 undef, i32 undef, i32 undef, i32 5}31}32 33@x = external global i3234@y = external global i3235 36; Check we call a function returning more than 4 words correctly.37define i32 @g() nounwind {38; CHECK-LABEL: g:39; CHECK: entsp 340; CHECK: ldc [[REGISTER:r[0-9]+]], 041; CHECK: stw [[REGISTER]], sp[1]42; CHECK: bl f43; CHECK-NEXT: ldw r0, sp[2]44; CHECK-NEXT: retsp 345;46body:47  %0 = call { i32, i32, i32, i32, i32 } @f(i32 0, i32 0, i32 0, i32 0, i32 0)48  %1 = extractvalue { i32, i32, i32, i32, i32 } %0, 449  ret i32 %150}51 52; Variadic functions return structs bigger than 4 words via a hidden53; sret-parameter54define internal %1 @ReturnBigStruct2(i32 %dummy, ...) nounwind readnone {55entry:56  %0 = insertvalue %1 zeroinitializer, i32 12, 057  %1 = insertvalue %1 %0, i32 24, 158  %2 = insertvalue %1 %1, i32 48, 259  %3 = insertvalue %1 %2, i32 24601, 360  %4 = insertvalue %1 %3, i32 4321, 461  ret %1 %462}63; CHECK-LABEL: ReturnBigStruct2:64; CHECK: ldc r1, 432165; CHECK: stw r1, r0[4]66; CHECK: ldc r1, 2460167; CHECK: stw r1, r0[3]68; CHECK: ldc r1, 4869; CHECK: stw r1, r0[2]70; CHECK: ldc r1, 2471; CHECK: stw r1, r0[1]72; CHECK: ldc r1, 1273; CHECK: stw r1, r0[0]74; CHECK: retsp 075