[llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp

Christopher Lamb christopher.lamb at gmail.com
Sat Apr 21 01:17:08 PDT 2007



Changes in directory llvm/lib/Bytecode/Reader:

Reader.cpp updated: 1.248 -> 1.249
---
Log message:


add support for alignment attributes on load/store instructions


---
Diffs of the changes:  (+21 -3)

 Reader.cpp |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)


Index: llvm/lib/Bytecode/Reader/Reader.cpp
diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.248 llvm/lib/Bytecode/Reader/Reader.cpp:1.249
--- llvm/lib/Bytecode/Reader/Reader.cpp:1.248	Thu Apr 12 13:32:50 2007
+++ llvm/lib/Bytecode/Reader/Reader.cpp	Sat Apr 21 03:16:25 2007
@@ -831,13 +831,31 @@
                                      &Idx[0], Idx.size());
       break;
     }
-    case 62:   // volatile load
+    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 Instruction::Load:
       if (Oprnds.size() != 1 || !isa<PointerType>(InstTy))
         error("Invalid load instruction!");
-      Result = new LoadInst(getValue(iType, Oprnds[0]), "", Opcode == 62);
+      Result = new LoadInst(getValue(iType, Oprnds[0]), "");
       break;
-    case 63:   // volatile store
+    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 Instruction::Store: {
       if (!isa<PointerType>(InstTy) || Oprnds.size() != 2)
         error("Invalid store instruction!");






More information about the llvm-commits mailing list