summaryrefslogtreecommitdiff
path: root/lib/Bytecode
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-04-21 18:36:27 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-04-21 18:36:27 +0000
commitc67bdc288aac130d88630f7fa95ceca6bcf95077 (patch)
tree3fae3a889e0520a5670196b40f6a2f9eb5b1adfb /lib/Bytecode
parentb3b0727032e58c8b8f3017c2b3f560616c6905af (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.cpp24
-rw-r--r--lib/Bytecode/Writer/Writer.cpp32
2 files changed, 8 insertions, 48 deletions
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 59c69d7c496..49792693dcc 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 1dd0dc923a5..4688e69ef2f 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