Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / inline-asm-S-constraint.ll
blob11add36da27b6f1da7183ddc47221259f90355cf
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 < %s | FileCheck %s --check-prefix=RV32
3 ; RUN: llc -mtriple=riscv64 < %s | FileCheck %s --check-prefix=RV64
5 @var = external dso_local global i32, align 4
7 define dso_local ptr @constraint_S() {
8 ; RV32-LABEL: constraint_S:
9 ; RV32:       # %bb.0:
10 ; RV32-NEXT:    #APP
11 ; RV32-NEXT:    lui a0, %hi(var)
12 ; RV32-NEXT:    addi a0, a0, %lo(var)
13 ; RV32-NEXT:    #NO_APP
14 ; RV32-NEXT:    ret
16 ; RV64-LABEL: constraint_S:
17 ; RV64:       # %bb.0:
18 ; RV64-NEXT:    #APP
19 ; RV64-NEXT:    lui a0, %hi(var)
20 ; RV64-NEXT:    addi a0, a0, %lo(var)
21 ; RV64-NEXT:    #NO_APP
22 ; RV64-NEXT:    ret
23   %ret = tail call ptr asm "lui $0, %hi($1)\0Aaddi $0, $0, %lo($1)", "=r,S"(ptr nonnull @var)
24   ret ptr %ret
27 ; Function Attrs: nofree nosync nounwind readnone
28 define dso_local ptr @constraint_S_label() {
29 ; RV32-LABEL: constraint_S_label:
30 ; RV32:       # %bb.0: # %entry
31 ; RV32-NEXT:  .Ltmp0: # Block address taken
32 ; RV32-NEXT:  # %bb.1: # %L1
33 ; RV32-NEXT:    #APP
34 ; RV32-NEXT:    lui a0, %hi(.Ltmp0)
35 ; RV32-NEXT:    addi a0, a0, %lo(.Ltmp0)
36 ; RV32-NEXT:    #NO_APP
37 ; RV32-NEXT:    ret
39 ; RV64-LABEL: constraint_S_label:
40 ; RV64:       # %bb.0: # %entry
41 ; RV64-NEXT:  .Ltmp0: # Block address taken
42 ; RV64-NEXT:  # %bb.1: # %L1
43 ; RV64-NEXT:    #APP
44 ; RV64-NEXT:    lui a0, %hi(.Ltmp0)
45 ; RV64-NEXT:    addi a0, a0, %lo(.Ltmp0)
46 ; RV64-NEXT:    #NO_APP
47 ; RV64-NEXT:    ret
48 entry:
49   br label %L1
51 L1:
52   %ret = tail call ptr asm "lui $0, %hi($1)\0Aaddi $0, $0, %lo($1)", "=r,S"(ptr blockaddress(@constraint_S_label, %L1))
53   ret ptr %ret