xref: /llvm-project/llvm/test/CodeGen/RISCV/inline-asm-mem-constraint-2.ll (revision 4bf68aaca2ec11ffde3ee4c30e9761a144434a92)
1*4bf68aacSAnton Sidorenko; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*4bf68aacSAnton Sidorenko; RUN: llc -mtriple=riscv32 -verify-machineinstrs -no-integrated-as < %s \
3*4bf68aacSAnton Sidorenko; RUN:   | FileCheck -check-prefixes=RV32I %s
4*4bf68aacSAnton Sidorenko; RUN: llc -mtriple=riscv64 -verify-machineinstrs -no-integrated-as < %s \
5*4bf68aacSAnton Sidorenko; RUN:   | FileCheck -check-prefixes=RV64I %s
6*4bf68aacSAnton Sidorenko; RUN: llc -mtriple=riscv32 -code-model=medium -verify-machineinstrs -no-integrated-as < %s \
7*4bf68aacSAnton Sidorenko; RUN:   | FileCheck -check-prefixes=RV32I-MEDIUM %s
8*4bf68aacSAnton Sidorenko; RUN: llc -mtriple=riscv64 -code-model=medium -verify-machineinstrs -no-integrated-as < %s \
9*4bf68aacSAnton Sidorenko; RUN:   | FileCheck -check-prefixes=RV64I-MEDIUM %s
10*4bf68aacSAnton Sidorenko;
11*4bf68aacSAnton Sidorenko; integrated-as fails with error: unexpected token
12*4bf68aacSAnton Sidorenko;   sw zero, %lo(eg)(a0) \n sw zero, %lo(eg)(a0)
13*4bf68aacSAnton Sidorenko;                        ^
14*4bf68aacSAnton Sidorenko
15*4bf68aacSAnton Sidorenko@eg = external global [4000 x i32], align 4
16*4bf68aacSAnton Sidorenko@ewg = extern_weak global [4000 x i32], align 4
17*4bf68aacSAnton Sidorenko
18*4bf68aacSAnton Sidorenkodefine void @constraint_o_with_multi_operands() nounwind {
19*4bf68aacSAnton Sidorenko; RV32I-LABEL: constraint_o_with_multi_operands:
20*4bf68aacSAnton Sidorenko; RV32I:       # %bb.0:
21*4bf68aacSAnton Sidorenko; RV32I-NEXT:    lui a0, %hi(eg)
22*4bf68aacSAnton Sidorenko; RV32I-NEXT:    #APP
23*4bf68aacSAnton Sidorenko; RV32I-NEXT:    sw zero, %lo(eg)(a0) \n sw zero, %lo(eg)(a0)
24*4bf68aacSAnton Sidorenko; RV32I-NEXT:    #NO_APP
25*4bf68aacSAnton Sidorenko; RV32I-NEXT:    ret
26*4bf68aacSAnton Sidorenko;
27*4bf68aacSAnton Sidorenko; RV64I-LABEL: constraint_o_with_multi_operands:
28*4bf68aacSAnton Sidorenko; RV64I:       # %bb.0:
29*4bf68aacSAnton Sidorenko; RV64I-NEXT:    lui a0, %hi(eg)
30*4bf68aacSAnton Sidorenko; RV64I-NEXT:    #APP
31*4bf68aacSAnton Sidorenko; RV64I-NEXT:    sw zero, %lo(eg)(a0) \n sw zero, %lo(eg)(a0)
32*4bf68aacSAnton Sidorenko; RV64I-NEXT:    #NO_APP
33*4bf68aacSAnton Sidorenko; RV64I-NEXT:    ret
34*4bf68aacSAnton Sidorenko;
35*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-LABEL: constraint_o_with_multi_operands:
36*4bf68aacSAnton Sidorenko; RV32I-MEDIUM:       # %bb.0:
37*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:  .Lpcrel_hi0:
38*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)
39*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    #APP
40*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi0)(a0) \n sw zero, %pcrel_lo(.Lpcrel_hi0)(a0)
41*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    #NO_APP
42*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    ret
43*4bf68aacSAnton Sidorenko;
44*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-LABEL: constraint_o_with_multi_operands:
45*4bf68aacSAnton Sidorenko; RV64I-MEDIUM:       # %bb.0:
46*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:  .Lpcrel_hi0:
47*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)
48*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    #APP
49*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    sw zero, %pcrel_lo(.Lpcrel_hi0)(a0) \n sw zero, %pcrel_lo(.Lpcrel_hi0)(a0)
50*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    #NO_APP
51*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    ret
52*4bf68aacSAnton Sidorenko  call void asm "sw zero, $0 \n sw zero, $1", "=*o,=*o"(ptr elementtype(i32) @eg, ptr elementtype(i32) @eg)
53*4bf68aacSAnton Sidorenko  ret void
54*4bf68aacSAnton Sidorenko}
55*4bf68aacSAnton Sidorenko
56*4bf68aacSAnton Sidorenkodefine void @constraint_A_with_multi_operands() nounwind {
57*4bf68aacSAnton Sidorenko; RV32I-LABEL: constraint_A_with_multi_operands:
58*4bf68aacSAnton Sidorenko; RV32I:       # %bb.0:
59*4bf68aacSAnton Sidorenko; RV32I-NEXT:    lui a0, %hi(eg)
60*4bf68aacSAnton Sidorenko; RV32I-NEXT:    addi a0, a0, %lo(eg)
61*4bf68aacSAnton Sidorenko; RV32I-NEXT:    #APP
62*4bf68aacSAnton Sidorenko; RV32I-NEXT:    sw zero, 0(a0) \n sw zero, 0(a0)
63*4bf68aacSAnton Sidorenko; RV32I-NEXT:    #NO_APP
64*4bf68aacSAnton Sidorenko; RV32I-NEXT:    ret
65*4bf68aacSAnton Sidorenko;
66*4bf68aacSAnton Sidorenko; RV64I-LABEL: constraint_A_with_multi_operands:
67*4bf68aacSAnton Sidorenko; RV64I:       # %bb.0:
68*4bf68aacSAnton Sidorenko; RV64I-NEXT:    lui a0, %hi(eg)
69*4bf68aacSAnton Sidorenko; RV64I-NEXT:    addi a0, a0, %lo(eg)
70*4bf68aacSAnton Sidorenko; RV64I-NEXT:    #APP
71*4bf68aacSAnton Sidorenko; RV64I-NEXT:    sw zero, 0(a0) \n sw zero, 0(a0)
72*4bf68aacSAnton Sidorenko; RV64I-NEXT:    #NO_APP
73*4bf68aacSAnton Sidorenko; RV64I-NEXT:    ret
74*4bf68aacSAnton Sidorenko;
75*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-LABEL: constraint_A_with_multi_operands:
76*4bf68aacSAnton Sidorenko; RV32I-MEDIUM:       # %bb.0:
77*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:  .Lpcrel_hi1:
78*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)
79*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi1)
80*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    #APP
81*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    sw zero, 0(a0) \n sw zero, 0(a0)
82*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    #NO_APP
83*4bf68aacSAnton Sidorenko; RV32I-MEDIUM-NEXT:    ret
84*4bf68aacSAnton Sidorenko;
85*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-LABEL: constraint_A_with_multi_operands:
86*4bf68aacSAnton Sidorenko; RV64I-MEDIUM:       # %bb.0:
87*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:  .Lpcrel_hi1:
88*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    auipc a0, %pcrel_hi(eg)
89*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi1)
90*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    #APP
91*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    sw zero, 0(a0) \n sw zero, 0(a0)
92*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    #NO_APP
93*4bf68aacSAnton Sidorenko; RV64I-MEDIUM-NEXT:    ret
94*4bf68aacSAnton Sidorenko  call void asm "sw zero, $0 \n sw zero, $1", "=*A,=*A"(ptr elementtype(i32) @eg, ptr elementtype(i32) @eg)
95*4bf68aacSAnton Sidorenko  ret void
96*4bf68aacSAnton Sidorenko}
97