fix bug for dynamic shared memory

This commit is contained in:
Ruobing Han 2022-09-15 20:38:48 -04:00
parent ba2c49abdd
commit 3d22cc1f36
2 changed files with 3 additions and 5 deletions

View File

@ -47,12 +47,9 @@ void mem_share2global(llvm::Module *M) {
PointerType::get(array_type->getElementType(), 0); PointerType::get(array_type->getElementType(), 0);
llvm::Constant *x1 = ConstantPointerNull::get(PointerTy); llvm::Constant *x1 = ConstantPointerNull::get(PointerTy);
llvm::GlobalVariable *global_ptr = new llvm::GlobalVariable( llvm::GlobalVariable *global_ptr = new llvm::GlobalVariable(
*M, PointerTy, false, llvm::GlobalValue::CommonLinkage, x1, *M, PointerTy, false, llvm::GlobalValue::ExternalLinkage,
"wrapper_global_data", NULL, NULL, "dynamic_shared_memory", NULL,
llvm::GlobalValue::GeneralDynamicTLSModel, 0, false); llvm::GlobalValue::GeneralDynamicTLSModel, 0, false);
global_ptr->setDSOLocal(true);
corresponding_global_memory.insert( corresponding_global_memory.insert(
std::pair<GlobalVariable *, GlobalVariable *>(share_memory, std::pair<GlobalVariable *, GlobalVariable *>(share_memory,
global_ptr)); global_ptr));

View File

@ -234,6 +234,7 @@ void replace_dynamic_shared_memory(llvm::Module *M) {
auto new_bit_cast = auto new_bit_cast =
new BitCastInst(load_shared_memory, new BitCastInst(load_shared_memory,
dynamic_shared_memory_addr->getType(), "new_bit_cast"); dynamic_shared_memory_addr->getType(), "new_bit_cast");
new_bit_cast->insertAfter(load_shared_memory);
dynamic_shared_memory_addr->replaceUsesWithIf(new_bit_cast, [&](Use &U) { dynamic_shared_memory_addr->replaceUsesWithIf(new_bit_cast, [&](Use &U) {
auto *Instr = dyn_cast<Instruction>(U.getUser()); auto *Instr = dyn_cast<Instruction>(U.getUser());
return Instr != new_bit_cast && Instr != load_shared_memory; return Instr != new_bit_cast && Instr != load_shared_memory;