mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
[GlobalISel] Remove ConstantFoldingMIRBuilder
ConstantFoldingMIRBuilder was an experiment which is not used for anything. The constant folding functionality is now part of CSEMIRBuilder. Differential Revision: https://reviews.llvm.org/D101050
This commit is contained in:
parent
30b326d46e
commit
899f1c90ad
@ -1,78 +0,0 @@
|
||||
//===-- llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h --*- C++ -*-==//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// \file
|
||||
/// This file implements a version of MachineIRBuilder which does trivial
|
||||
/// constant folding.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_CODEGEN_GLOBALISEL_CONSTANTFOLDINGMIRBUILDER_H
|
||||
#define LLVM_CODEGEN_GLOBALISEL_CONSTANTFOLDINGMIRBUILDER_H
|
||||
|
||||
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
|
||||
#include "llvm/CodeGen/GlobalISel/Utils.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
/// An MIRBuilder which does trivial constant folding of binary ops.
|
||||
/// Calls to buildInstr will also try to constant fold binary ops.
|
||||
class ConstantFoldingMIRBuilder : public MachineIRBuilder {
|
||||
public:
|
||||
// Pull in base class constructors.
|
||||
using MachineIRBuilder::MachineIRBuilder;
|
||||
|
||||
virtual ~ConstantFoldingMIRBuilder() = default;
|
||||
|
||||
// Try to provide an overload for buildInstr for binary ops in order to
|
||||
// constant fold.
|
||||
MachineInstrBuilder buildInstr(unsigned Opc, ArrayRef<DstOp> DstOps,
|
||||
ArrayRef<SrcOp> SrcOps,
|
||||
Optional<unsigned> Flags = None) override {
|
||||
switch (Opc) {
|
||||
default:
|
||||
break;
|
||||
case TargetOpcode::G_ADD:
|
||||
case TargetOpcode::G_AND:
|
||||
case TargetOpcode::G_ASHR:
|
||||
case TargetOpcode::G_LSHR:
|
||||
case TargetOpcode::G_MUL:
|
||||
case TargetOpcode::G_OR:
|
||||
case TargetOpcode::G_SHL:
|
||||
case TargetOpcode::G_SUB:
|
||||
case TargetOpcode::G_XOR:
|
||||
case TargetOpcode::G_UDIV:
|
||||
case TargetOpcode::G_SDIV:
|
||||
case TargetOpcode::G_UREM:
|
||||
case TargetOpcode::G_SREM: {
|
||||
assert(DstOps.size() == 1 && "Invalid dst ops");
|
||||
assert(SrcOps.size() == 2 && "Invalid src ops");
|
||||
const DstOp &Dst = DstOps[0];
|
||||
const SrcOp &Src0 = SrcOps[0];
|
||||
const SrcOp &Src1 = SrcOps[1];
|
||||
if (auto MaybeCst =
|
||||
ConstantFoldBinOp(Opc, Src0.getReg(), Src1.getReg(), *getMRI()))
|
||||
return buildConstant(Dst, MaybeCst->getSExtValue());
|
||||
break;
|
||||
}
|
||||
case TargetOpcode::G_SEXT_INREG: {
|
||||
assert(DstOps.size() == 1 && "Invalid dst ops");
|
||||
assert(SrcOps.size() == 2 && "Invalid src ops");
|
||||
const DstOp &Dst = DstOps[0];
|
||||
const SrcOp &Src0 = SrcOps[0];
|
||||
const SrcOp &Src1 = SrcOps[1];
|
||||
if (auto MaybeCst =
|
||||
ConstantFoldExtOp(Opc, Src0.getReg(), Src1.getImm(), *getMRI()))
|
||||
return buildConstant(Dst, MaybeCst->getSExtValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return MachineIRBuilder::buildInstr(Opc, DstOps, SrcOps);
|
||||
}
|
||||
};
|
||||
} // namespace llvm
|
||||
|
||||
#endif // LLVM_CODEGEN_GLOBALISEL_CONSTANTFOLDINGMIRBUILDER_H
|
@ -7,7 +7,7 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "GISelMITest.h"
|
||||
#include "llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h"
|
||||
#include "llvm/CodeGen/GlobalISel/CSEMIRBuilder.h"
|
||||
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
|
||||
#include "llvm/CodeGen/GlobalISel/Utils.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
@ -22,7 +22,7 @@ TEST_F(AArch64GISelMITest, FoldWithBuilder) {
|
||||
if (!TM)
|
||||
return;
|
||||
// Try to use the FoldableInstructionsBuilder to build binary ops.
|
||||
ConstantFoldingMIRBuilder CFB(B.getState());
|
||||
CSEMIRBuilder CFB(B.getState());
|
||||
LLT s32 = LLT::scalar(32);
|
||||
int64_t Cst;
|
||||
auto MIBCAdd =
|
||||
@ -41,7 +41,7 @@ TEST_F(AArch64GISelMITest, FoldWithBuilder) {
|
||||
|
||||
// Try one of the other constructors of MachineIRBuilder to make sure it's
|
||||
// compatible.
|
||||
ConstantFoldingMIRBuilder CFB1(*MF);
|
||||
CSEMIRBuilder CFB1(*MF);
|
||||
CFB1.setInsertPt(*EntryMBB, EntryMBB->end());
|
||||
auto MIBCSub =
|
||||
CFB1.buildInstr(TargetOpcode::G_SUB, {s32},
|
||||
@ -236,4 +236,4 @@ TEST_F(AArch64GISelMITest, FoldBinOp) {
|
||||
EXPECT_EQ(16ULL, FoldGSremMix.getValue().getLimitedValue());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
@ -7,7 +7,6 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "GISelMITest.h"
|
||||
#include "llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h"
|
||||
#include "llvm/CodeGen/GlobalISel/MIPatternMatch.h"
|
||||
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
|
||||
#include "llvm/CodeGen/GlobalISel/Utils.h"
|
||||
|
Loading…
Reference in New Issue
Block a user