mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-27 05:10:41 +00:00
Revert r129235 pending a vetting of the EH rewrite.
--- Reverse-merging r129235 into '.': D test/Feature/bb_attrs.ll U include/llvm/BasicBlock.h U include/llvm/Bitcode/LLVMBitCodes.h U lib/VMCore/AsmWriter.cpp U lib/VMCore/BasicBlock.cpp U lib/AsmParser/LLParser.cpp U lib/AsmParser/LLLexer.cpp U lib/AsmParser/LLToken.h U lib/Bitcode/Reader/BitcodeReader.cpp U lib/Bitcode/Writer/BitcodeWriter.cpp llvm-svn: 129259
This commit is contained in:
parent
5b427ce48b
commit
12f5828e1e
@ -74,7 +74,6 @@ public:
|
||||
private:
|
||||
InstListType InstList;
|
||||
Function *Parent;
|
||||
bool IsLandingPad;
|
||||
|
||||
void setParent(Function *parent);
|
||||
friend class SymbolTableListTraits<BasicBlock, Function>;
|
||||
@ -139,11 +138,6 @@ public:
|
||||
return const_cast<BasicBlock*>(this)->getFirstNonPHIOrDbg();
|
||||
}
|
||||
|
||||
/// isLandingPad - True if this basic block is a landing pad for exception
|
||||
/// handling.
|
||||
bool isLandingPad() const { return IsLandingPad; }
|
||||
void setIsLandingPad(bool Val = true) { IsLandingPad = Val; }
|
||||
|
||||
/// removeFromParent - This method unlinks 'this' from the containing
|
||||
/// function, but does not delete it.
|
||||
///
|
||||
|
@ -106,9 +106,8 @@ namespace bitc {
|
||||
|
||||
// The value symbol table only has one code (VST_ENTRY_CODE).
|
||||
enum ValueSymtabCodes {
|
||||
VST_CODE_ENTRY = 1, // VST_ENTRY: [valid, namechar x N]
|
||||
VST_CODE_BBENTRY = 2, // VST_BBENTRY: [bbid, namechar x N]
|
||||
VST_CODE_LPADENTRY = 3 // VST_LPADENTRY: [lpadid, namechar x N]
|
||||
VST_CODE_ENTRY = 1, // VST_ENTRY: [valid, namechar x N]
|
||||
VST_CODE_BBENTRY = 2 // VST_BBENTRY: [bbid, namechar x N]
|
||||
};
|
||||
|
||||
enum MetadataCodes {
|
||||
|
@ -587,8 +587,6 @@ lltok::Kind LLLexer::LexIdentifier() {
|
||||
|
||||
KEYWORD(x);
|
||||
KEYWORD(blockaddress);
|
||||
|
||||
KEYWORD(landingpad);
|
||||
#undef KEYWORD
|
||||
|
||||
// Keywords for types.
|
||||
|
@ -2918,11 +2918,6 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
|
||||
BasicBlock *BB = PFS.DefineBB(Name, NameLoc);
|
||||
if (BB == 0) return true;
|
||||
|
||||
if (Lex.getKind() == lltok::kw_landingpad) {
|
||||
BB->setIsLandingPad();
|
||||
Lex.Lex();
|
||||
}
|
||||
|
||||
std::string NameStr;
|
||||
|
||||
// Parse the instructions in this block until we get a terminator.
|
||||
|
@ -125,9 +125,6 @@ namespace lltok {
|
||||
kw_extractelement, kw_insertelement, kw_shufflevector, kw_getresult,
|
||||
kw_extractvalue, kw_insertvalue, kw_blockaddress,
|
||||
|
||||
// Basic block attribute.
|
||||
kw_landingpad,
|
||||
|
||||
// Unsigned Valued tokens (UIntVal).
|
||||
GlobalID, // @42
|
||||
LocalVarID, // %42
|
||||
|
@ -714,8 +714,7 @@ bool BitcodeReader::ParseValueSymbolTable() {
|
||||
|
||||
// Read a record.
|
||||
Record.clear();
|
||||
unsigned VSTCode = Stream.ReadRecord(Code, Record);
|
||||
switch (VSTCode) {
|
||||
switch (Stream.ReadRecord(Code, Record)) {
|
||||
default: // Default behavior: unknown type.
|
||||
break;
|
||||
case bitc::VST_CODE_ENTRY: { // VST_ENTRY: [valueid, namechar x N]
|
||||
@ -730,17 +729,13 @@ bool BitcodeReader::ParseValueSymbolTable() {
|
||||
ValueName.clear();
|
||||
break;
|
||||
}
|
||||
case bitc::VST_CODE_BBENTRY:
|
||||
case bitc::VST_CODE_LPADENTRY: {
|
||||
case bitc::VST_CODE_BBENTRY: {
|
||||
if (ConvertToString(Record, 1, ValueName))
|
||||
return Error("Invalid VST_BBENTRY record");
|
||||
BasicBlock *BB = getBasicBlock(Record[0]);
|
||||
if (BB == 0)
|
||||
return Error("Invalid BB ID in VST_BBENTRY record");
|
||||
|
||||
if (VSTCode == bitc::VST_CODE_LPADENTRY)
|
||||
BB->setIsLandingPad(true);
|
||||
|
||||
BB->setName(StringRef(ValueName.data(), ValueName.size()));
|
||||
ValueName.clear();
|
||||
break;
|
||||
|
@ -40,7 +40,6 @@ enum {
|
||||
VST_ENTRY_7_ABBREV,
|
||||
VST_ENTRY_6_ABBREV,
|
||||
VST_BBENTRY_6_ABBREV,
|
||||
VST_LPADENTRY_6_ABBREV,
|
||||
|
||||
// CONSTANTS_BLOCK abbrev id's.
|
||||
CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
|
||||
@ -1180,20 +1179,13 @@ static void WriteValueSymbolTable(const ValueSymbolTable &VST,
|
||||
|
||||
unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
|
||||
|
||||
// VST_ENTRY: [valueid, namechar x N]
|
||||
// VST_BBENTRY: [bbid, namechar x N]
|
||||
// VST_LPADENTRY: [lpadid, namechar x N]
|
||||
// VST_ENTRY: [valueid, namechar x N]
|
||||
// VST_BBENTRY: [bbid, namechar x N]
|
||||
unsigned Code;
|
||||
if (const BasicBlock *BB = dyn_cast<BasicBlock>(SI->getValue())) {
|
||||
if (BB->isLandingPad()) {
|
||||
Code = bitc::VST_CODE_LPADENTRY;
|
||||
if (isChar6)
|
||||
AbbrevToUse = VST_LPADENTRY_6_ABBREV;
|
||||
} else {
|
||||
Code = bitc::VST_CODE_BBENTRY;
|
||||
if (isChar6)
|
||||
AbbrevToUse = VST_BBENTRY_6_ABBREV;
|
||||
}
|
||||
if (isa<BasicBlock>(SI->getValue())) {
|
||||
Code = bitc::VST_CODE_BBENTRY;
|
||||
if (isChar6)
|
||||
AbbrevToUse = VST_BBENTRY_6_ABBREV;
|
||||
} else {
|
||||
Code = bitc::VST_CODE_ENTRY;
|
||||
if (isChar6)
|
||||
@ -1374,16 +1366,8 @@ static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) {
|
||||
Abbv) != VST_BBENTRY_6_ABBREV)
|
||||
llvm_unreachable("Unexpected abbrev ordering!");
|
||||
}
|
||||
{ // 6-bit char6 VST_LPADENTRY strings.
|
||||
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
|
||||
Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_LPADENTRY));
|
||||
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
|
||||
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
|
||||
Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
|
||||
if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
|
||||
Abbv) != VST_LPADENTRY_6_ABBREV)
|
||||
llvm_unreachable("Unexpected abbrev ordering!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
{ // SETTYPE abbrev for CONSTANTS_BLOCK.
|
||||
BitCodeAbbrev *Abbv = new BitCodeAbbrev();
|
||||
|
@ -1687,13 +1687,8 @@ void AssemblyWriter::printBasicBlock(const BasicBlock *BB) {
|
||||
Out << "\n";
|
||||
PrintLLVMName(Out, BB->getName(), LabelPrefix);
|
||||
Out << ':';
|
||||
if (BB->isLandingPad())
|
||||
Out << " landingpad";
|
||||
} else if (!BB->use_empty()) { // Don't print block # of no uses...
|
||||
Out << '\n';
|
||||
if (BB->isLandingPad())
|
||||
Out << "landingpad ";
|
||||
Out << "; <label>:";
|
||||
Out << "\n; <label>:";
|
||||
int Slot = Machine.getLocalSlot(BB);
|
||||
if (Slot != -1)
|
||||
Out << Slot;
|
||||
|
@ -38,10 +38,10 @@ LLVMContext &BasicBlock::getContext() const {
|
||||
// are not in the public header file...
|
||||
template class llvm::SymbolTableListTraits<Instruction, BasicBlock>;
|
||||
|
||||
|
||||
BasicBlock::BasicBlock(LLVMContext &C, const Twine &Name, Function *NewParent,
|
||||
BasicBlock *InsertBefore)
|
||||
: Value(Type::getLabelTy(C), Value::BasicBlockVal), Parent(0),
|
||||
IsLandingPad(false) {
|
||||
: Value(Type::getLabelTy(C), Value::BasicBlockVal), Parent(0) {
|
||||
|
||||
// Make sure that we get added to a function
|
||||
LeakDetector::addGarbageObject(this);
|
||||
@ -57,6 +57,7 @@ BasicBlock::BasicBlock(LLVMContext &C, const Twine &Name, Function *NewParent,
|
||||
setName(Name);
|
||||
}
|
||||
|
||||
|
||||
BasicBlock::~BasicBlock() {
|
||||
// If the address of the block is taken and it is being deleted (e.g. because
|
||||
// it is dead), this means that there is either a dangling constant expr
|
||||
|
@ -1,29 +0,0 @@
|
||||
; RUN: llvm-as < %s | llvm-dis > %t1.ll
|
||||
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
|
||||
; RUN: diff %t1.ll %t2.ll
|
||||
|
||||
; Test for basic block attributes.
|
||||
|
||||
define i32 @f1(i32 %a) {
|
||||
entry:
|
||||
%cmp = icmp slt i32 %a, 37
|
||||
br i1 %cmp, label %bb, label %lpad
|
||||
|
||||
bb:
|
||||
ret i32 37
|
||||
|
||||
lpad: landingpad
|
||||
ret i32 927
|
||||
}
|
||||
|
||||
define i32 @f2(i32 %a) {
|
||||
; entry : 0
|
||||
%1 = icmp slt i32 %a, 37
|
||||
br i1 %1, label %2, label %3
|
||||
|
||||
; bb : 2
|
||||
ret i32 37
|
||||
|
||||
landingpad ; bb : 3
|
||||
ret i32 927
|
||||
}
|
Loading…
Reference in New Issue
Block a user