brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · b955e43 Raw
226 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -no-integrated-as < %s \3; RUN:   | FileCheck -check-prefix=CSKY %s4 5@gi = external global i326@mi = external global i647 8define i32 @constraint_r(i32 %a) nounwind {9; CSKY-LABEL: constraint_r:10; CSKY:       # %bb.0:11; CSKY-NEXT:    subi16 sp, sp, 412; CSKY-NEXT:    lrw32 a1, [.LCPI0_0]13; CSKY-NEXT:    ld16.w a1, (a1, 0)14; CSKY-NEXT:    #APP15; CSKY-NEXT:    add a0, a0, a116; CSKY-NEXT:    #NO_APP17; CSKY-NEXT:    addi16 sp, sp, 418; CSKY-NEXT:    rts1619; CSKY-NEXT:    .p2align 120; CSKY-NEXT:  # %bb.1:21; CSKY-NEXT:    .p2align 222; CSKY-NEXT:  .LCPI0_0:23; CSKY-NEXT:    .long gi24  %1 = load i32, ptr @gi25  %2 = tail call i32 asm "add $0, $1, $2", "=r,r,r"(i32 %a, i32 %1)26  ret i32 %227}28 29define i64 @constraint_r_i64(i32 %a) nounwind {30; CSKY-LABEL: constraint_r_i64:31; CSKY:       # %bb.0:32; CSKY-NEXT:    subi16 sp, sp, 433; CSKY-NEXT:    lrw32 a3, [.LCPI1_0]34; CSKY-NEXT:    ld16.w a1, (a3, 0)35; CSKY-NEXT:    ld16.w a2, (a3, 4)36; CSKY-NEXT:    #APP37; CSKY-NEXT:    mula.s32 a1, a0, a038; CSKY-NEXT:    #NO_APP39; CSKY-NEXT:    mov16 a0, a140; CSKY-NEXT:    mov16 a1, a241; CSKY-NEXT:    addi16 sp, sp, 442; CSKY-NEXT:    rts1643; CSKY-NEXT:    .p2align 144; CSKY-NEXT:  # %bb.1:45; CSKY-NEXT:    .p2align 246; CSKY-NEXT:  .LCPI1_0:47; CSKY-NEXT:    .long mi48  %1 = load i64, ptr @mi49  %2 = call i64 asm "mula.s32 $0, $1, $2", "=r,r,r,0"(i32 %a, i32 %a, i64 %1)50  ret i64 %251}52 53define i32 @constraint_a(i32 %a) nounwind {54; CSKY-LABEL: constraint_a:55; CSKY:       # %bb.0:56; CSKY-NEXT:    subi16 sp, sp, 457; CSKY-NEXT:    lrw32 a1, [.LCPI2_0]58; CSKY-NEXT:    ld16.w a1, (a1, 0)59; CSKY-NEXT:    #APP60; CSKY-NEXT:    add a0, a0, a161; CSKY-NEXT:    #NO_APP62; CSKY-NEXT:    addi16 sp, sp, 463; CSKY-NEXT:    rts1664; CSKY-NEXT:    .p2align 165; CSKY-NEXT:  # %bb.1:66; CSKY-NEXT:    .p2align 267; CSKY-NEXT:  .LCPI2_0:68; CSKY-NEXT:    .long gi69  %1 = load i32, ptr @gi70  %2 = tail call i32 asm "add $0, $1, $2", "=a,a,a"(i32 %a, i32 %1)71  ret i32 %272}73 74define i32 @constraint_b(i32 %a) nounwind {75; CSKY-LABEL: constraint_b:76; CSKY:       # %bb.0:77; CSKY-NEXT:    subi16 sp, sp, 478; CSKY-NEXT:    lrw32 a1, [.LCPI3_0]79; CSKY-NEXT:    ld16.w a1, (a1, 0)80; CSKY-NEXT:    #APP81; CSKY-NEXT:    add a0, a0, a182; CSKY-NEXT:    #NO_APP83; CSKY-NEXT:    addi16 sp, sp, 484; CSKY-NEXT:    rts1685; CSKY-NEXT:    .p2align 186; CSKY-NEXT:  # %bb.1:87; CSKY-NEXT:    .p2align 288; CSKY-NEXT:  .LCPI3_0:89; CSKY-NEXT:    .long gi90  %1 = load i32, ptr @gi91  %2 = tail call i32 asm "add $0, $1, $2", "=b,b,b"(i32 %a, i32 %1)92  ret i32 %293}94 95define i32 @constraint_z(i32 %a) nounwind {96; CSKY-LABEL: constraint_z:97; CSKY:       # %bb.0:98; CSKY-NEXT:    subi16 sp, sp, 499; CSKY-NEXT:    mov16 sp, a0100; CSKY-NEXT:    lrw32 a0, [.LCPI4_0]101; CSKY-NEXT:    ld16.w a0, (a0, 0)102; CSKY-NEXT:    #APP103; CSKY-NEXT:    add a0, sp, a0104; CSKY-NEXT:    #NO_APP105; CSKY-NEXT:    addi16 sp, sp, 4106; CSKY-NEXT:    rts16107; CSKY-NEXT:    .p2align 1108; CSKY-NEXT:  # %bb.1:109; CSKY-NEXT:    .p2align 2110; CSKY-NEXT:  .LCPI4_0:111; CSKY-NEXT:    .long gi112  %1 = load i32, ptr @gi113  %2 = tail call i32 asm "add $0, $1, $2", "=r,z,r"(i32 %a, i32 %1)114  ret i32 %2115}116 117define i32 @constraint_c(i32 %a, i32 %b) nounwind {118; CSKY-LABEL: constraint_c:119; CSKY:       # %bb.0:120; CSKY-NEXT:    subi16 sp, sp, 4121; CSKY-NEXT:    lrw32 a1, [.LCPI5_0]122; CSKY-NEXT:    ld16.w a1, (a1, 0)123; CSKY-NEXT:    #APP124; CSKY-NEXT:    addc a0, a0, a1125; CSKY-NEXT:    #NO_APP126; CSKY-NEXT:    addi16 sp, sp, 4127; CSKY-NEXT:    rts16128; CSKY-NEXT:    .p2align 1129; CSKY-NEXT:  # %bb.1:130; CSKY-NEXT:    .p2align 2131; CSKY-NEXT:  .LCPI5_0:132; CSKY-NEXT:    .long gi133  %1 = load i32, ptr @gi134  %2 = tail call i32 asm "addc $0, $1, $2", "=r,r,r,~{c}"(i32 %a, i32 %1)135  ret i32 %2136}137 138define i32 @constraint_i(i32 %a) nounwind {139; CSKY-LABEL: constraint_i:140; CSKY:       # %bb.0:141; CSKY-NEXT:    subi16 sp, sp, 4142; CSKY-NEXT:    #APP143; CSKY-NEXT:    addi a0, a0, 113144; CSKY-NEXT:    #NO_APP145; CSKY-NEXT:    addi16 sp, sp, 4146; CSKY-NEXT:    rts16147 148  %1 = load i32, ptr @gi149  %2 = tail call i32 asm "addi $0, $1, $2", "=r,r,i"(i32 %a, i32 113)150  ret i32 %2151}152 153define void @constraint_m(ptr %a) nounwind {154; CSKY-LABEL: constraint_m:155; CSKY:       # %bb.0:156; CSKY-NEXT:    subi16 sp, sp, 4157; CSKY-NEXT:    #APP158; CSKY-NEXT:    #NO_APP159; CSKY-NEXT:    addi16 sp, sp, 4160; CSKY-NEXT:    rts16161 162  call void asm sideeffect "", "=*m"(ptr elementtype(i32) %a)163  ret void164}165 166define i32 @constraint_m2(ptr %a) nounwind {167; CSKY-LABEL: constraint_m2:168; CSKY:       # %bb.0:169; CSKY-NEXT:    subi16 sp, sp, 4170; CSKY-NEXT:    #APP171; CSKY-NEXT:    ld.w a0, (a0, 0)172; CSKY-NEXT:    #NO_APP173; CSKY-NEXT:    addi16 sp, sp, 4174; CSKY-NEXT:    rts16175 176  %1 = tail call i32 asm "ld.w $0, $1", "=r,*m"(ptr elementtype(i32) %a)177  ret i32 %1178}179 180define i32 @modifier_i_imm(i32 %a) nounwind {181; CSKY-LABEL: modifier_i_imm:182; CSKY:       # %bb.0:183; CSKY-NEXT:    subi16 sp, sp, 4184; CSKY-NEXT:    #APP185; CSKY-NEXT:    addi a0, a0, 1186; CSKY-NEXT:    #NO_APP187; CSKY-NEXT:    addi16 sp, sp, 4188; CSKY-NEXT:    rts16189  %1 = tail call i32 asm "addi $0, $1, $2", "=r,r,ri"(i32 %a, i32 1)190  ret i32 %1191}192 193define void @operand_global() nounwind {194; CSKY-LABEL: operand_global:195; CSKY:       # %bb.0:196; CSKY-NEXT:    subi16 sp, sp, 4197; CSKY-NEXT:    #APP198; CSKY-NEXT:    .4byte gi199; CSKY-NEXT:    #NO_APP200; CSKY-NEXT:    addi16 sp, sp, 4201; CSKY-NEXT:    rts16202 203  tail call void asm sideeffect ".4byte $0", "i"(ptr @gi)204  ret void205}206 207define void @operand_block_address() nounwind {208; CSKY-LABEL: operand_block_address:209; CSKY:       # %bb.0:210; CSKY-NEXT:    subi16 sp, sp, 4211; CSKY-NEXT:    #APP212; CSKY-NEXT:    br32 .Ltmp0213; CSKY-NEXT:    #NO_APP214; CSKY-NEXT:  .Ltmp0: # Block address taken215; CSKY-NEXT:  # %bb.1: # %bb216; CSKY-NEXT:    addi16 sp, sp, 4217; CSKY-NEXT:    rts16218 219  call void asm sideeffect "br32 $0", "i"(ptr blockaddress(@operand_block_address, %bb))220  br label %bb221bb:222  ret void223}224 225; TODO: expand tests for more complex constraints, out of range immediates etc226