From cd732537e880506e5ae8e05bf0c99d93f409a134 Mon Sep 17 00:00:00 2001 From: Alexey Prokhin Date: Sun, 4 Dec 2011 16:05:48 +0400 Subject: [PATCH] Fixed atomic_store and atomic_load instrinsics --- gen/toir.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gen/toir.cpp b/gen/toir.cpp index 5763ab5d..d248e332 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -948,7 +948,7 @@ DValue* CallExp::toElem(IRState* p) LLValue* ptr = exp2->toElem(p)->getRVal(); llvm::StoreInst* ret = gIR->ir->CreateStore(val, ptr, "tmp"); ret->setAtomic(llvm::AtomicOrdering(atomicOrdering)); - ret->setAlignment(exp1->type->alignsize()); + ret->setAlignment(getTypeAllocSize(val->getType())); return NULL; // atomic load instruction } else if (fndecl->llvmInternal == LLVMatomic_load) { @@ -957,7 +957,7 @@ DValue* CallExp::toElem(IRState* p) LLValue* ptr = exp->toElem(p)->getRVal(); Type* retType = exp->type->nextOf(); llvm::LoadInst* val = gIR->ir->CreateLoad(ptr, "tmp"); - val->setAlignment(retType->alignsize()); + val->setAlignment(getTypeAllocSize(val->getType())); val->setAtomic(llvm::AtomicOrdering(atomicOrdering)); return new DImValue(retType, val); // cmpxchg instruction