diff --git a/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp b/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp --- a/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp +++ b/llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp @@ -89,5 +89,8 @@ .widenScalarToNextPow2(0) .clampScalar(0, XLenLLT, XLenLLT); + getActionDefinitionsBuilder(G_GLOBAL_VALUE) + .legalFor({p0}); + getLegacyLegalizerInfo().computeTables(); } diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/rv32/legalize-global.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/rv32/legalize-global.mir new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/rv32/legalize-global.mir @@ -0,0 +1,33 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s + +--- | + @var = global i32 0 + + define ptr @test_global() { + ret ptr @var + } + +... +--- +name: test_global +alignment: 4 +tracksRegLiveness: true +registers: + - { id: 0, class: _ } +frameInfo: + maxAlignment: 1 +machineFunctionInfo: + varArgsFrameIndex: 0 + varArgsSaveSize: 0 +body: | + bb.1 (%ir-block.0): + ; CHECK-LABEL: name: test_global + ; CHECK: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var + ; CHECK-NEXT: $x10 = COPY [[GV]](p0) + ; CHECK-NEXT: PseudoRET implicit $x10 + %0:_(p0) = G_GLOBAL_VALUE @var + $x10 = COPY %0(p0) + PseudoRET implicit $x10 + +... diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/rv64/legalize-global.mir b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/rv64/legalize-global.mir new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/GlobalISel/legalizer/rv64/legalize-global.mir @@ -0,0 +1,33 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - | FileCheck %s + +--- | + @var = global i32 0 + + define ptr @test_global() { + ret ptr @var + } + +... +--- +name: test_global +alignment: 4 +tracksRegLiveness: true +registers: + - { id: 0, class: _ } +frameInfo: + maxAlignment: 1 +machineFunctionInfo: + varArgsFrameIndex: 0 + varArgsSaveSize: 0 +body: | + bb.1 (%ir-block.0): + ; CHECK-LABEL: name: test_global + ; CHECK: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var + ; CHECK-NEXT: $x10 = COPY [[GV]](p0) + ; CHECK-NEXT: PseudoRET implicit $x10 + %0:_(p0) = G_GLOBAL_VALUE @var + $x10 = COPY %0(p0) + PseudoRET implicit $x10 + +...