diff --git a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp index c0d6a9eeef636..9a27a19d65d8f 100644 --- a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp +++ b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp @@ -23,6 +23,7 @@ #include "llvm/CodeGen/TargetOpcodes.h" #include "llvm/CodeGen/ValueTypes.h" #include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Intrinsics.h" #include "llvm/IR/IntrinsicsAArch64.h" #include "llvm/IR/Type.h" #include "llvm/Support/MathExtras.h" @@ -967,6 +968,12 @@ bool AArch64LegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper, MI.eraseFromParent(); return true; } + case Intrinsic::get_dynamic_area_offset: { + MachineIRBuilder &MIB = Helper.MIRBuilder; + MIB.buildConstant(MI.getOperand(0).getReg(), 0); + MI.eraseFromParent(); + return true; + } } return true; diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-intrinsic-get-dynamic-area-offset.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-intrinsic-get-dynamic-area-offset.mir new file mode 100644 index 0000000000000..a157554132530 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-intrinsic-get-dynamic-area-offset.mir @@ -0,0 +1,39 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py + +# RUN:llc %s -verify-machineinstrs -mtriple=aarch64-unknown-unknown -run-pass=legalizer -o - | FileCheck %s + +... +--- +name: test_64 +alignment: 4 +tracksRegLiveness: true +machineFunctionInfo: {} +body: | + bb.0: + liveins: + ; CHECK-LABEL: name: test_64 + ; CHECK: %v:_(s64) = G_CONSTANT i64 0 + ; CHECK: $x0 = COPY %v(s64) + ; CHECK: RET_ReallyLR implicit $x0 + %v:_(s64) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.get.dynamic.area.offset) + $x0 = COPY %v(s64) + RET_ReallyLR implicit $x0 + +... +--- +name: test_32 +alignment: 4 +tracksRegLiveness: true +machineFunctionInfo: {} +body: | + bb.0: + liveins: + ; CHECK-LABEL: name: test_32 + ; CHECK: %v:_(s32) = G_CONSTANT i32 0 + ; CHECK: $w0 = COPY %v(s32) + ; CHECK: RET_ReallyLR implicit $w0 + %v:_(s32) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.get.dynamic.area.offset) + $w0 = COPY %v(s32) + RET_ReallyLR implicit $w0 + +...