brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 88e5119 Raw
104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mips64-unknown-freebsd -O0 -o - %s | FileCheck %s3 4; Previously SelectionDAGBuilder would always set alignment to 1 for hidden sret5; parameters so we were generating ldl+ldr/lwl+lwr to load those values even6; though we know that they are aligned (since we allocated an aligned frame index)7 8declare dso_local void @use_sret(i32, i128, i64) unnamed_addr9declare dso_local { i32, i128, i64 } @implicit_sret_decl() unnamed_addr10 11define internal void @test() unnamed_addr nounwind {12; CHECK-LABEL: test:13; CHECK:       # %bb.0: # %start14; CHECK-NEXT:    daddiu $sp, $sp, -6415; CHECK-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill16; CHECK-NEXT:    daddiu $4, $sp, 017; CHECK-NEXT:    jal implicit_sret_decl18; CHECK-NEXT:    nop19; CHECK-NEXT:    ld $6, 24($sp)20; CHECK-NEXT:    ld $5, 16($sp)21; CHECK-NEXT:    ld $7, 32($sp)22; CHECK-NEXT:    lw $4, 0($sp)23; CHECK-NEXT:    jal use_sret24; CHECK-NEXT:    nop25; CHECK-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload26; CHECK-NEXT:    daddiu $sp, $sp, 6427; CHECK-NEXT:    jr $ra28; CHECK-NEXT:    nop29start:30  %0 = call { i32, i128, i64 } @implicit_sret_decl()31  %1 = extractvalue { i32, i128, i64 } %0, 032  %2 = extractvalue { i32, i128, i64 } %0, 133  %3 = extractvalue { i32, i128, i64 } %0, 234  call void @use_sret(i32 %1, i128 %2, i64 %3)35  ret void36}37 38define internal { i32, i128, i64 } @implicit_sret_impl() unnamed_addr nounwind {39; CHECK-LABEL: implicit_sret_impl:40; CHECK:       # %bb.0:41; CHECK-NEXT:    # kill: def $at_64 killed $a0_6442; CHECK-NEXT:    daddiu $1, $zero, 2043; CHECK-NEXT:    sd $1, 24($4)44; CHECK-NEXT:    daddiu $1, $zero, 045; CHECK-NEXT:    sd $zero, 16($4)46; CHECK-NEXT:    daddiu $1, $zero, 3047; CHECK-NEXT:    sd $1, 32($4)48; CHECK-NEXT:    addiu $1, $zero, 1049; CHECK-NEXT:    sw $1, 0($4)50; CHECK-NEXT:    jr $ra51; CHECK-NEXT:    nop52  ret { i32, i128, i64 } { i32 10, i128 20, i64 30 }53}54 55declare dso_local { i32, i32, i32, i32, i32, i32 } @implicit_sret_decl2() unnamed_addr56declare dso_local void @use_sret2(i32, i32, i32) unnamed_addr57define internal void @test2() unnamed_addr nounwind {58; CHECK-LABEL: test2:59; CHECK:       # %bb.0: # %start60; CHECK-NEXT:    daddiu $sp, $sp, -3261; CHECK-NEXT:    sd $ra, 24($sp) # 8-byte Folded Spill62; CHECK-NEXT:    daddiu $4, $sp, 063; CHECK-NEXT:    jal implicit_sret_decl264; CHECK-NEXT:    nop65; CHECK-NEXT:    lw $6, 20($sp)66; CHECK-NEXT:    lw $5, 12($sp)67; CHECK-NEXT:    lw $4, 4($sp)68; CHECK-NEXT:    jal use_sret269; CHECK-NEXT:    nop70; CHECK-NEXT:    ld $ra, 24($sp) # 8-byte Folded Reload71; CHECK-NEXT:    daddiu $sp, $sp, 3272; CHECK-NEXT:    jr $ra73; CHECK-NEXT:    nop74start:75  %0 = call { i32, i32, i32, i32, i32, i32 } @implicit_sret_decl2()76  %1 = extractvalue { i32, i32, i32, i32, i32, i32 } %0, 177  %2 = extractvalue { i32, i32, i32, i32, i32, i32 } %0, 378  %3 = extractvalue { i32, i32, i32, i32, i32, i32 } %0, 579  call void @use_sret2(i32 %1, i32 %2, i32 %3)80  ret void81}82 83 84define internal { i32, i32, i32, i32, i32, i32 } @implicit_sret_impl2() unnamed_addr nounwind {85; CHECK-LABEL: implicit_sret_impl2:86; CHECK:       # %bb.0:87; CHECK-NEXT:    # kill: def $at_64 killed $a0_6488; CHECK-NEXT:    addiu $1, $zero, 689; CHECK-NEXT:    sw $1, 20($4)90; CHECK-NEXT:    addiu $1, $zero, 591; CHECK-NEXT:    sw $1, 16($4)92; CHECK-NEXT:    addiu $1, $zero, 493; CHECK-NEXT:    sw $1, 12($4)94; CHECK-NEXT:    addiu $1, $zero, 395; CHECK-NEXT:    sw $1, 8($4)96; CHECK-NEXT:    addiu $1, $zero, 297; CHECK-NEXT:    sw $1, 4($4)98; CHECK-NEXT:    addiu $1, $zero, 199; CHECK-NEXT:    sw $1, 0($4)100; CHECK-NEXT:    jr $ra101; CHECK-NEXT:    nop102  ret { i32, i32, i32, i32, i32, i32 } { i32 1, i32 2, i32 3, i32 4, i32 5, i32 6 }103}104