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