1394f3091SWeining Lu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs --no-integrated-as < %s \ 3394f3091SWeining Lu; RUN: | FileCheck %s 4*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs --no-integrated-as < %s \ 5394f3091SWeining Lu; RUN: | FileCheck %s 6394f3091SWeining Lu 7394f3091SWeining Lu@gi = external dso_local global i32, align 4 8394f3091SWeining Lu 9394f3091SWeining Ludefine i32 @constraint_r(i32 %a, i32 %b) nounwind { 10394f3091SWeining Lu; CHECK-LABEL: constraint_r: 11394f3091SWeining Lu; CHECK: # %bb.0: 12394f3091SWeining Lu; CHECK-NEXT: #APP 13394f3091SWeining Lu; CHECK-NEXT: add.w $a0, $a0, $a1 14394f3091SWeining Lu; CHECK-NEXT: #NO_APP 15394f3091SWeining Lu; CHECK-NEXT: ret 16394f3091SWeining Lu %1 = tail call i32 asm "add.w $0, $1, $2", "=r,r,r"(i32 %a, i32 %b) 17394f3091SWeining Lu ret i32 %1 18394f3091SWeining Lu} 19394f3091SWeining Lu 20394f3091SWeining Ludefine i32 @constraint_i(i32 %a) nounwind { 21394f3091SWeining Lu; CHECK-LABEL: constraint_i: 22394f3091SWeining Lu; CHECK: # %bb.0: 23394f3091SWeining Lu; CHECK-NEXT: #APP 24394f3091SWeining Lu; CHECK-NEXT: addi.w $a0, $a0, 113 25394f3091SWeining Lu; CHECK-NEXT: #NO_APP 26394f3091SWeining Lu; CHECK-NEXT: ret 27394f3091SWeining Lu %1 = tail call i32 asm "addi.w $0, $1, $2", "=r,r,i"(i32 %a, i32 113) 28394f3091SWeining Lu ret i32 %1 29394f3091SWeining Lu} 30394f3091SWeining Lu 31394f3091SWeining Ludefine void @constraint_l() nounwind { 32394f3091SWeining Lu; CHECK-LABEL: constraint_l: 33394f3091SWeining Lu; CHECK: # %bb.0: 34394f3091SWeining Lu; CHECK-NEXT: #APP 35394f3091SWeining Lu; CHECK-NEXT: lu12i.w $a0, 32767 36394f3091SWeining Lu; CHECK-NEXT: #NO_APP 37394f3091SWeining Lu; CHECK-NEXT: #APP 38394f3091SWeining Lu; CHECK-NEXT: lu12i.w $a0, -32768 39394f3091SWeining Lu; CHECK-NEXT: #NO_APP 40394f3091SWeining Lu; CHECK-NEXT: ret 41394f3091SWeining Lu tail call void asm sideeffect "lu12i.w $$a0, $0", "l"(i32 32767) 42394f3091SWeining Lu tail call void asm sideeffect "lu12i.w $$a0, $0", "l"(i32 -32768) 43394f3091SWeining Lu ret void 44394f3091SWeining Lu} 45394f3091SWeining Lu 46394f3091SWeining Ludefine void @constraint_I() nounwind { 47394f3091SWeining Lu; CHECK-LABEL: constraint_I: 48394f3091SWeining Lu; CHECK: # %bb.0: 49394f3091SWeining Lu; CHECK-NEXT: #APP 50394f3091SWeining Lu; CHECK-NEXT: addi.w $a0, $a0, 2047 51394f3091SWeining Lu; CHECK-NEXT: #NO_APP 52394f3091SWeining Lu; CHECK-NEXT: #APP 53394f3091SWeining Lu; CHECK-NEXT: addi.w $a0, $a0, -2048 54394f3091SWeining Lu; CHECK-NEXT: #NO_APP 55394f3091SWeining Lu; CHECK-NEXT: ret 56394f3091SWeining Lu tail call void asm sideeffect "addi.w $$a0, $$a0, $0", "I"(i32 2047) 57394f3091SWeining Lu tail call void asm sideeffect "addi.w $$a0, $$a0, $0", "I"(i32 -2048) 58394f3091SWeining Lu ret void 59394f3091SWeining Lu} 60394f3091SWeining Lu 61cd0174aaSWeining Ludefine void @constraint_J() nounwind { 62cd0174aaSWeining Lu; CHECK-LABEL: constraint_J: 63cd0174aaSWeining Lu; CHECK: # %bb.0: 64cd0174aaSWeining Lu; CHECK-NEXT: #APP 65cd0174aaSWeining Lu; CHECK-NEXT: addi.w $a0, $a0, 0 66cd0174aaSWeining Lu; CHECK-NEXT: #NO_APP 67cd0174aaSWeining Lu; CHECK-NEXT: ret 68cd0174aaSWeining Lu tail call void asm sideeffect "addi.w $$a0, $$a0, $0", "J"(i32 0) 69cd0174aaSWeining Lu ret void 70cd0174aaSWeining Lu} 71cd0174aaSWeining Lu 72394f3091SWeining Ludefine void @constraint_K() nounwind { 73394f3091SWeining Lu; CHECK-LABEL: constraint_K: 74394f3091SWeining Lu; CHECK: # %bb.0: 75394f3091SWeining Lu; CHECK-NEXT: #APP 76394f3091SWeining Lu; CHECK-NEXT: andi $a0, $a0, 4095 77394f3091SWeining Lu; CHECK-NEXT: #NO_APP 78394f3091SWeining Lu; CHECK-NEXT: #APP 79394f3091SWeining Lu; CHECK-NEXT: andi $a0, $a0, 0 80394f3091SWeining Lu; CHECK-NEXT: #NO_APP 81394f3091SWeining Lu; CHECK-NEXT: ret 82394f3091SWeining Lu tail call void asm sideeffect "andi $$a0, $$a0, $0", "K"(i32 4095) 83394f3091SWeining Lu tail call void asm sideeffect "andi $$a0, $$a0, $0", "K"(i32 0) 84394f3091SWeining Lu ret void 85394f3091SWeining Lu} 86394f3091SWeining Lu 87394f3091SWeining Ludefine void @operand_global() nounwind { 88394f3091SWeining Lu; CHECK-LABEL: operand_global: 89394f3091SWeining Lu; CHECK: # %bb.0: 90394f3091SWeining Lu; CHECK-NEXT: #APP 91394f3091SWeining Lu; CHECK-NEXT: .8byte gi 92394f3091SWeining Lu; CHECK-NEXT: #NO_APP 93394f3091SWeining Lu; CHECK-NEXT: ret 94394f3091SWeining Lu tail call void asm sideeffect ".8byte $0", "i"(ptr @gi) 95394f3091SWeining Lu ret void 96394f3091SWeining Lu} 97394f3091SWeining Lu 98394f3091SWeining Ludefine void @operand_block_address() nounwind { 99394f3091SWeining Lu; CHECK-LABEL: operand_block_address: 100394f3091SWeining Lu; CHECK: # %bb.0: 101394f3091SWeining Lu; CHECK-NEXT: #APP 102394f3091SWeining Lu; CHECK-NEXT: b .Ltmp0 103394f3091SWeining Lu; CHECK-NEXT: #NO_APP 104394f3091SWeining Lu; CHECK-NEXT: .Ltmp0: # Block address taken 105394f3091SWeining Lu; CHECK-NEXT: # %bb.1: # %bb 106394f3091SWeining Lu; CHECK-NEXT: ret 107d507c010Swanglei call void asm sideeffect "b $0", "i"(ptr blockaddress(@operand_block_address, %bb)) 108394f3091SWeining Lu br label %bb 109394f3091SWeining Lubb: 110394f3091SWeining Lu ret void 111394f3091SWeining Lu} 112