Loading llvm/include/llvm/CodeGen/GlobalISel/IRTranslator.h +3 −2 Original line number Diff line number Diff line Loading @@ -466,8 +466,9 @@ private: bool translateSIToFP(const User &U, MachineIRBuilder &MIRBuilder) { return translateCast(TargetOpcode::G_SITOFP, U, MIRBuilder); } bool translateUnreachable(const User &U, MachineIRBuilder &MIRBuilder); bool translateUnreachable(const User &U, MachineIRBuilder &MIRBuilder) { return true; } bool translateSExt(const User &U, MachineIRBuilder &MIRBuilder) { return translateCast(TargetOpcode::G_SEXT, U, MIRBuilder); } Loading llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +0 −22 Original line number Diff line number Diff line Loading @@ -2699,28 +2699,6 @@ bool IRTranslator::translateVAArg(const User &U, MachineIRBuilder &MIRBuilder) { return true; } bool IRTranslator::translateUnreachable(const User &U, MachineIRBuilder &MIRBuilder) { if (!MF->getTarget().Options.TrapUnreachable) return true; auto &UI = cast<UnreachableInst>(U); // We may be able to ignore unreachable behind a noreturn call. if (MF->getTarget().Options.NoTrapAfterNoreturn) { const BasicBlock &BB = *UI.getParent(); if (&UI != &BB.front()) { BasicBlock::const_iterator PredI = std::prev(BasicBlock::const_iterator(UI)); if (const CallInst *Call = dyn_cast<CallInst>(&*PredI)) { if (Call->doesNotReturn()) return true; } } } MIRBuilder.buildIntrinsic(Intrinsic::trap, ArrayRef<Register>(), true); return true; } bool IRTranslator::translateInsertElement(const User &U, MachineIRBuilder &MIRBuilder) { // If it is a <1 x Ty> vector, use the scalar as it is Loading llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-unreachable.lldeleted 100644 → 0 +0 −24 Original line number Diff line number Diff line ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py ; RUN: llc -O0 -mtriple=aarch64-apple-ios -global-isel -stop-after=irtranslator %s -o - | FileCheck %s declare void @llvm.trap() define void @unreachable() { ; CHECK-LABEL: name: unreachable ; CHECK: bb.1 (%ir-block.0): ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap) unreachable ret void } declare void @foo() noreturn define void @trap_call_noreturn() { ; CHECK-LABEL: name: trap_call_noreturn ; CHECK: bb.1 (%ir-block.0): ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp ; CHECK-NEXT: BL @foo, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp call void @foo() unreachable ret void } Loading
llvm/include/llvm/CodeGen/GlobalISel/IRTranslator.h +3 −2 Original line number Diff line number Diff line Loading @@ -466,8 +466,9 @@ private: bool translateSIToFP(const User &U, MachineIRBuilder &MIRBuilder) { return translateCast(TargetOpcode::G_SITOFP, U, MIRBuilder); } bool translateUnreachable(const User &U, MachineIRBuilder &MIRBuilder); bool translateUnreachable(const User &U, MachineIRBuilder &MIRBuilder) { return true; } bool translateSExt(const User &U, MachineIRBuilder &MIRBuilder) { return translateCast(TargetOpcode::G_SEXT, U, MIRBuilder); } Loading
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +0 −22 Original line number Diff line number Diff line Loading @@ -2699,28 +2699,6 @@ bool IRTranslator::translateVAArg(const User &U, MachineIRBuilder &MIRBuilder) { return true; } bool IRTranslator::translateUnreachable(const User &U, MachineIRBuilder &MIRBuilder) { if (!MF->getTarget().Options.TrapUnreachable) return true; auto &UI = cast<UnreachableInst>(U); // We may be able to ignore unreachable behind a noreturn call. if (MF->getTarget().Options.NoTrapAfterNoreturn) { const BasicBlock &BB = *UI.getParent(); if (&UI != &BB.front()) { BasicBlock::const_iterator PredI = std::prev(BasicBlock::const_iterator(UI)); if (const CallInst *Call = dyn_cast<CallInst>(&*PredI)) { if (Call->doesNotReturn()) return true; } } } MIRBuilder.buildIntrinsic(Intrinsic::trap, ArrayRef<Register>(), true); return true; } bool IRTranslator::translateInsertElement(const User &U, MachineIRBuilder &MIRBuilder) { // If it is a <1 x Ty> vector, use the scalar as it is Loading
llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-unreachable.lldeleted 100644 → 0 +0 −24 Original line number Diff line number Diff line ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py ; RUN: llc -O0 -mtriple=aarch64-apple-ios -global-isel -stop-after=irtranslator %s -o - | FileCheck %s declare void @llvm.trap() define void @unreachable() { ; CHECK-LABEL: name: unreachable ; CHECK: bb.1 (%ir-block.0): ; CHECK-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.trap) unreachable ret void } declare void @foo() noreturn define void @trap_call_noreturn() { ; CHECK-LABEL: name: trap_call_noreturn ; CHECK: bb.1 (%ir-block.0): ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp ; CHECK-NEXT: BL @foo, csr_darwin_aarch64_aapcs, implicit-def $lr, implicit $sp ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp call void @foo() unreachable ret void }