diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-04-21 18:36:27 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-04-21 18:36:27 +0000 |
commit | c67bdc288aac130d88630f7fa95ceca6bcf95077 (patch) | |
tree | 3fae3a889e0520a5670196b40f6a2f9eb5b1adfb /lib/Bytecode | |
parent | b3b0727032e58c8b8f3017c2b3f560616c6905af (diff) |
Revert Christopher Lamb's load/store alignment changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36309 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode')
-rw-r--r-- | lib/Bytecode/Reader/Reader.cpp | 24 | ||||
-rw-r--r-- | lib/Bytecode/Writer/Writer.cpp | 32 |
2 files changed, 8 insertions, 48 deletions
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index 59c69d7c49..49792693dc 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -831,31 +831,13 @@ void BytecodeReader::ParseInstruction(SmallVector<unsigned, 8> &Oprnds, &Idx[0], Idx.size()); break; } - case 62: { // attributed load - if (Oprnds.size() != 2 || !isa<PointerType>(InstTy)) - error("Invalid attributed load instruction!"); - signed Log2AlignVal = ((Oprnds[1]>>1)-1); - Result = new LoadInst(getValue(iType, Oprnds[0]), "", (Oprnds[1] & 1), - ((Log2AlignVal < 0) ? 0 : 1<<Log2AlignVal)); - break; - } + case 62: // volatile load case Instruction::Load: if (Oprnds.size() != 1 || !isa<PointerType>(InstTy)) error("Invalid load instruction!"); - Result = new LoadInst(getValue(iType, Oprnds[0]), ""); + Result = new LoadInst(getValue(iType, Oprnds[0]), "", Opcode == 62); break; - case 63: { // attributed store - if (!isa<PointerType>(InstTy) || Oprnds.size() != 3) - error("Invalid store instruction!"); - - Value *Ptr = getValue(iType, Oprnds[1]); - const Type *ValTy = cast<PointerType>(Ptr->getType())->getElementType(); - signed Log2AlignVal = ((Oprnds[2]>>1)-1); - Result = new StoreInst(getValue(getTypeSlot(ValTy), Oprnds[0]), Ptr, - (Oprnds[2] & 1), - ((Log2AlignVal < 0) ? 0 : 1<<Log2AlignVal)); - break; - } + case 63: // volatile store case Instruction::Store: { if (!isa<PointerType>(InstTy) || Oprnds.size() != 2) error("Invalid store instruction!"); diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp index 1dd0dc923a..4688e69ef2 100644 --- a/lib/Bytecode/Writer/Writer.cpp +++ b/lib/Bytecode/Writer/Writer.cpp @@ -616,7 +616,7 @@ void BytecodeWriter::outputInstruction(const Instruction &I) { unsigned Opcode = I.getOpcode(); unsigned NumOperands = I.getNumOperands(); - // Encode 'tail call' as 61 + // Encode 'tail call' as 61, 'volatile load' as 62, and 'volatile store' as // 63. if (const CallInst *CI = dyn_cast<CallInst>(&I)) { if (CI->getCallingConv() == CallingConv::C) { @@ -632,6 +632,10 @@ void BytecodeWriter::outputInstruction(const Instruction &I) { } else { Opcode = 58; // Call escape sequence. } + } else if (isa<LoadInst>(I) && cast<LoadInst>(I).isVolatile()) { + Opcode = 62; + } else if (isa<StoreInst>(I) && cast<StoreInst>(I).isVolatile()) { + Opcode = 63; } // Figure out which type to encode with the instruction. Typically we want @@ -740,32 +744,6 @@ void BytecodeWriter::outputInstruction(const Instruction &I) { } else if (isa<InvokeInst>(I)) { // Invoke escape seq has at least 4 operands to encode. ++NumOperands; - } else if (const LoadInst *LI = dyn_cast<LoadInst>(&I)) { - // Encode attributed load as opcode 62 - // We need to encode the attributes of the load instruction as the second - // operand. Its not really a slot, but we don't want to break the - // instruction format for these instructions. - if (LI->getAlignment() || LI->isVolatile()) { - NumOperands = 2; - Slots[1] = ((Log2_32(LI->getAlignment())+1)<<1) + - (LI->isVolatile() ? 1 : 0); - if (Slots[1] > MaxOpSlot) - MaxOpSlot = Slots[1]; - Opcode = 62; - } - } else if (const StoreInst *SI = dyn_cast<StoreInst>(&I)) { - // Encode attributed store as opcode 63 - // We need to encode the attributes of the store instruction as the third - // operand. Its not really a slot, but we don't want to break the - // instruction format for these instructions. - if (SI->getAlignment() || SI->isVolatile()) { - NumOperands = 3; - Slots[2] = ((Log2_32(SI->getAlignment())+1)<<1) + - (SI->isVolatile() ? 1 : 0); - if (Slots[2] > MaxOpSlot) - MaxOpSlot = Slots[2]; - Opcode = 63; - } } // Decide which instruction encoding to use. This is determined primarily |