1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs --no-integrated-as < %s \ 3; RUN: | FileCheck %s 4; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs --no-integrated-as < %s \ 5; RUN: | FileCheck %s 6 7@gi = external dso_local global i32, align 4 8 9define i32 @constraint_r(i32 %a, i32 %b) nounwind { 10; CHECK-LABEL: constraint_r: 11; CHECK: # %bb.0: 12; CHECK-NEXT: #APP 13; CHECK-NEXT: add.w $a0, $a0, $a1 14; CHECK-NEXT: #NO_APP 15; CHECK-NEXT: ret 16 %1 = tail call i32 asm "add.w $0, $1, $2", "=r,r,r"(i32 %a, i32 %b) 17 ret i32 %1 18} 19 20define i32 @constraint_i(i32 %a) nounwind { 21; CHECK-LABEL: constraint_i: 22; CHECK: # %bb.0: 23; CHECK-NEXT: #APP 24; CHECK-NEXT: addi.w $a0, $a0, 113 25; CHECK-NEXT: #NO_APP 26; CHECK-NEXT: ret 27 %1 = tail call i32 asm "addi.w $0, $1, $2", "=r,r,i"(i32 %a, i32 113) 28 ret i32 %1 29} 30 31define void @constraint_l() nounwind { 32; CHECK-LABEL: constraint_l: 33; CHECK: # %bb.0: 34; CHECK-NEXT: #APP 35; CHECK-NEXT: lu12i.w $a0, 32767 36; CHECK-NEXT: #NO_APP 37; CHECK-NEXT: #APP 38; CHECK-NEXT: lu12i.w $a0, -32768 39; CHECK-NEXT: #NO_APP 40; CHECK-NEXT: ret 41 tail call void asm sideeffect "lu12i.w $$a0, $0", "l"(i32 32767) 42 tail call void asm sideeffect "lu12i.w $$a0, $0", "l"(i32 -32768) 43 ret void 44} 45 46define void @constraint_I() nounwind { 47; CHECK-LABEL: constraint_I: 48; CHECK: # %bb.0: 49; CHECK-NEXT: #APP 50; CHECK-NEXT: addi.w $a0, $a0, 2047 51; CHECK-NEXT: #NO_APP 52; CHECK-NEXT: #APP 53; CHECK-NEXT: addi.w $a0, $a0, -2048 54; CHECK-NEXT: #NO_APP 55; CHECK-NEXT: ret 56 tail call void asm sideeffect "addi.w $$a0, $$a0, $0", "I"(i32 2047) 57 tail call void asm sideeffect "addi.w $$a0, $$a0, $0", "I"(i32 -2048) 58 ret void 59} 60 61define void @constraint_J() nounwind { 62; CHECK-LABEL: constraint_J: 63; CHECK: # %bb.0: 64; CHECK-NEXT: #APP 65; CHECK-NEXT: addi.w $a0, $a0, 0 66; CHECK-NEXT: #NO_APP 67; CHECK-NEXT: ret 68 tail call void asm sideeffect "addi.w $$a0, $$a0, $0", "J"(i32 0) 69 ret void 70} 71 72define void @constraint_K() nounwind { 73; CHECK-LABEL: constraint_K: 74; CHECK: # %bb.0: 75; CHECK-NEXT: #APP 76; CHECK-NEXT: andi $a0, $a0, 4095 77; CHECK-NEXT: #NO_APP 78; CHECK-NEXT: #APP 79; CHECK-NEXT: andi $a0, $a0, 0 80; CHECK-NEXT: #NO_APP 81; CHECK-NEXT: ret 82 tail call void asm sideeffect "andi $$a0, $$a0, $0", "K"(i32 4095) 83 tail call void asm sideeffect "andi $$a0, $$a0, $0", "K"(i32 0) 84 ret void 85} 86 87define void @operand_global() nounwind { 88; CHECK-LABEL: operand_global: 89; CHECK: # %bb.0: 90; CHECK-NEXT: #APP 91; CHECK-NEXT: .8byte gi 92; CHECK-NEXT: #NO_APP 93; CHECK-NEXT: ret 94 tail call void asm sideeffect ".8byte $0", "i"(ptr @gi) 95 ret void 96} 97 98define void @operand_block_address() nounwind { 99; CHECK-LABEL: operand_block_address: 100; CHECK: # %bb.0: 101; CHECK-NEXT: #APP 102; CHECK-NEXT: b .Ltmp0 103; CHECK-NEXT: #NO_APP 104; CHECK-NEXT: .Ltmp0: # Block address taken 105; CHECK-NEXT: # %bb.1: # %bb 106; CHECK-NEXT: ret 107 call void asm sideeffect "b $0", "i"(ptr blockaddress(@operand_block_address, %bb)) 108 br label %bb 109bb: 110 ret void 111} 112