From f0b49995e561b96505a3c756589df7456959dcb9 Mon Sep 17 00:00:00 2001 From: Evghenii Date: Tue, 7 Jan 2014 19:13:10 +0100 Subject: [PATCH] fix offset compuations --- ctx.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ctx.cpp b/ctx.cpp index bb4a7920..7d8e7dba 100644 --- a/ctx.cpp +++ b/ctx.cpp @@ -1842,8 +1842,9 @@ static llvm::Value* lCorrectLocalPtr(FunctionEmitContext *ctx, llvm::Value* valu llvm::Function *func_warpsz = m->module->getFunction("__warpsize"); llvm::Value *__tid_x = ctx->CallInst(func_tid_x, NULL, std::vector(), "tidCorrectLocalPtr"); llvm::Value *__warpsz = ctx->CallInst(func_warpsz, NULL, std::vector(), "warpSzCorrectLocaLPtr"); - llvm::Value *__warpid = ctx->BinaryOperator(llvm::Instruction::SDiv, __tid_x, __warpsz, "warpIdCorrectLocalPtr"); - return llvm::GetElementPtrInst::Create(value, __warpid, "__gepCorrectLocalPtr", ctx->GetCurrentBasicBlock()); + llvm::Value *_mwarpsz = ctx->BinaryOperator(llvm::Instruction::Sub, LLVMInt32(0), __warpsz, "mwarpSzCorrectLocalPtr"); + llvm::Value *__offset = ctx->BinaryOperator(llvm::Instruction::And, __tid_x, _mwarpsz, "offsetCorrectLocalPtr"); + return llvm::GetElementPtrInst::Create(value, __offset, "__gepCorrectLocalPtr", ctx->GetCurrentBasicBlock()); } static llvm::Value* lConvertLocalToGenericPtr(FunctionEmitContext *ctx, llvm::Value *value)