[IR] Add Freeze instruction
Summary: - Define Instruction::Freeze, let it be UnaryOperator - Add support for freeze to LLLexer/LLParser/BitcodeReader/BitcodeWriter The format is `%x = freeze <ty> %v` - Add support for freeze instruction to llvm-c interface. - Add m_Freeze in PatternMatch. - Erase freeze when lowering IR to SelDag. Reviewers: deadalnix, hfinkel, efriedma, lebedev.ri, nlopes, jdoerfert, regehr, filcab, delcypher, whitequark Reviewed By: lebedev.ri, jdoerfert Subscribers: jfb, kristof.beyls, hiraditya, lebedev.ri, steven_wu, dexonsmith, xbolva00, delcypher, spatel, regehr, trentxintong, vsk, filcab, nlopes, mehdi_amini, deadalnix, llvm-commits Differential Revision: https://reviews.llvm.org/D29011
This commit is contained in:
@@ -1055,16 +1055,13 @@ static int getDecodedCastOpcode(unsigned Val) {
|
||||
}
|
||||
|
||||
static int getDecodedUnaryOpcode(unsigned Val, Type *Ty) {
|
||||
bool IsFP = Ty->isFPOrFPVectorTy();
|
||||
// UnOps are only valid for int/fp or vector of int/fp types
|
||||
if (!IsFP && !Ty->isIntOrIntVectorTy())
|
||||
return -1;
|
||||
|
||||
switch (Val) {
|
||||
default:
|
||||
return -1;
|
||||
case bitc::UNOP_FNEG:
|
||||
return IsFP ? Instruction::FNeg : -1;
|
||||
return Ty->isFPOrFPVectorTy() ? Instruction::FNeg : -1;
|
||||
case bitc::UNOP_FREEZE:
|
||||
return Instruction::Freeze;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3865,7 +3862,7 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
|
||||
case bitc::FUNC_CODE_INST_UNOP: { // UNOP: [opval, ty, opcode]
|
||||
unsigned OpNum = 0;
|
||||
Value *LHS;
|
||||
if (getValueTypePair(Record, OpNum, NextValueNo, LHS) ||
|
||||
if (getValueTypePair(Record, OpNum, NextValueNo, LHS, &FullTy) ||
|
||||
OpNum+1 > Record.size())
|
||||
return error("Invalid record");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user