1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -relocation-model=static < %s | FileCheck %s --check-prefix=RV32 3; RUN: llc -mtriple=riscv64 -relocation-model=pic < %s | FileCheck %s --check-prefix=RV64 4 5@var = external dso_local global i32, align 4 6@a = external global [2 x [2 x i32]], align 4 7 8define dso_local void @test() { 9; RV32-LABEL: test: 10; RV32: # %bb.0: # %entry 11; RV32-NEXT: #APP 12; RV32-NEXT: # var a+12 test 13; RV32-NEXT: #NO_APP 14; RV32-NEXT: #APP 15; RV32-NEXT: # var a+12 test 16; RV32-NEXT: #NO_APP 17; RV32-NEXT: ret 18; 19; RV64-LABEL: test: 20; RV64: # %bb.0: # %entry 21; RV64-NEXT: #APP 22; RV64-NEXT: # var a+12 .Ltest$local 23; RV64-NEXT: #NO_APP 24; RV64-NEXT: #APP 25; RV64-NEXT: # var a+12 .Ltest$local 26; RV64-NEXT: #NO_APP 27; RV64-NEXT: ret 28entry: 29 call void asm sideeffect "// $0 $1 $2", "s,s,s,~{dirflag},~{fpsr},~{flags}"(ptr @var, ptr getelementptr inbounds ([2 x [2 x i32]], ptr @a, i64 0, i64 1, i64 1), ptr @test) 30 31 ;; Implement "S" as an alias for "s". 32 call void asm sideeffect "// $0 $1 $2", "S,S,S,~{dirflag},~{fpsr},~{flags}"(ptr @var, ptr getelementptr inbounds ([2 x [2 x i32]], ptr @a, i64 0, i64 1, i64 1), ptr @test) 33 ret void 34} 35 36; Function Attrs: nofree nosync nounwind readnone 37define dso_local ptr @test_label() { 38; RV32-LABEL: test_label: 39; RV32: # %bb.0: # %entry 40; RV32-NEXT: .Ltmp0: # Block address taken 41; RV32-NEXT: # %bb.1: # %L1 42; RV32-NEXT: #APP 43; RV32-NEXT: # .Ltmp0 44; RV32-NEXT: #NO_APP 45; RV32-NEXT: #APP 46; RV32-NEXT: lui a0, %hi(.Ltmp0) 47; RV32-NEXT: addi a0, a0, %lo(.Ltmp0) 48; RV32-NEXT: #NO_APP 49; RV32-NEXT: ret 50; 51; RV64-LABEL: test_label: 52; RV64: # %bb.0: # %entry 53; RV64-NEXT: .Ltmp0: # Block address taken 54; RV64-NEXT: # %bb.1: # %L1 55; RV64-NEXT: #APP 56; RV64-NEXT: # .Ltmp0 57; RV64-NEXT: #NO_APP 58; RV64-NEXT: #APP 59; RV64-NEXT: lui a0, %hi(.Ltmp0) 60; RV64-NEXT: addi a0, a0, %lo(.Ltmp0) 61; RV64-NEXT: #NO_APP 62; RV64-NEXT: ret 63entry: 64 br label %L1 65 66L1: 67 call void asm sideeffect "// $0", "s,~{dirflag},~{fpsr},~{flags}"(ptr blockaddress(@test_label, %L1)) 68 %ret = tail call ptr asm "lui $0, %hi($1)\0Aaddi $0, $0, %lo($1)", "=r,S"(ptr blockaddress(@test_label, %L1)) 69 ret ptr %ret 70} 71