xref: /llvm-project/llvm/test/CodeGen/LoongArch/inline-asm-constraint.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
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