mirror of
https://github.com/vosen/ZLUDA.git
synced 2025-08-03 14:50:53 +00:00
Revert "Emit lifetime.start and lifetime.end"
This reverts commit 193708fb0b
.
This commit is contained in:
parent
193708fb0b
commit
a9ce8190d0
1 changed files with 9 additions and 89 deletions
|
@ -38,9 +38,6 @@ struct EmitContext<'a> {
|
||||||
names: NamedIdGenerator,
|
names: NamedIdGenerator,
|
||||||
denorm_statistics: FxHashMap<Id, DenormSummary>,
|
denorm_statistics: FxHashMap<Id, DenormSummary>,
|
||||||
compilation_mode: CompilationMode,
|
compilation_mode: CompilationMode,
|
||||||
llvm_lifetime_start: LLVMValueRef,
|
|
||||||
llvm_lifetime_end: LLVMValueRef,
|
|
||||||
llvm_lifetime_type: LLVMTypeRef,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> EmitContext<'a> {
|
impl<'a> EmitContext<'a> {
|
||||||
|
@ -54,38 +51,8 @@ impl<'a> EmitContext<'a> {
|
||||||
compilation_mode: CompilationMode,
|
compilation_mode: CompilationMode,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let builder = unsafe { llvm::Builder::create(context.get()) };
|
let builder = unsafe { llvm::Builder::create(context.get()) };
|
||||||
let constants = Constants::amdgpu();
|
|
||||||
let texref_underlying_type =
|
let texref_underlying_type =
|
||||||
unsafe { LLVMStructCreateNamed(context.get(), TEXREF_UNDERLYING) };
|
unsafe { LLVMStructCreateNamed(context.get(), TEXREF_UNDERLYING) };
|
||||||
let llvm_lifetime_type = unsafe {
|
|
||||||
LLVMFunctionType(
|
|
||||||
llvm::void_type(context),
|
|
||||||
[
|
|
||||||
LLVMInt64TypeInContext(context.get()),
|
|
||||||
LLVMPointerType(
|
|
||||||
LLVMInt8TypeInContext(context.get()),
|
|
||||||
constants.private_space,
|
|
||||||
),
|
|
||||||
]
|
|
||||||
.as_mut_ptr(),
|
|
||||||
2,
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
let llvm_lifetime_start = unsafe {
|
|
||||||
LLVMAddFunction(
|
|
||||||
module.get(),
|
|
||||||
format!("llvm.lifetime.start.p{}\0", constants.private_space).as_ptr() as _,
|
|
||||||
llvm_lifetime_type,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
let llvm_lifetime_end = unsafe {
|
|
||||||
LLVMAddFunction(
|
|
||||||
module.get(),
|
|
||||||
format!("llvm.lifetime.end.p{}\0", constants.private_space).as_ptr() as _,
|
|
||||||
llvm_lifetime_type,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
EmitContext {
|
EmitContext {
|
||||||
context,
|
context,
|
||||||
module,
|
module,
|
||||||
|
@ -95,9 +62,6 @@ impl<'a> EmitContext<'a> {
|
||||||
names: NamedIdGenerator::new(id_gen, id_defs, directive),
|
names: NamedIdGenerator::new(id_gen, id_defs, directive),
|
||||||
denorm_statistics,
|
denorm_statistics,
|
||||||
compilation_mode,
|
compilation_mode,
|
||||||
llvm_lifetime_start,
|
|
||||||
llvm_lifetime_end,
|
|
||||||
llvm_lifetime_type,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -541,12 +505,12 @@ fn emit_function_variable(
|
||||||
) -> Result<(), TranslateError> {
|
) -> Result<(), TranslateError> {
|
||||||
let builder = ctx.builder.get();
|
let builder = ctx.builder.get();
|
||||||
let llvm_type = get_llvm_type(ctx, &variable.type_)?;
|
let llvm_type = get_llvm_type(ctx, &variable.type_)?;
|
||||||
let (value, _) = emit_alloca(
|
let value = emit_alloca(
|
||||||
ctx,
|
ctx,
|
||||||
(llvm_type, variable.type_.layout().size()),
|
llvm_type,
|
||||||
get_llvm_address_space(&ctx.constants, variable.state_space)?,
|
get_llvm_address_space(&ctx.constants, variable.state_space)?,
|
||||||
Some(variable.name),
|
Some(variable.name),
|
||||||
)?;
|
);
|
||||||
match variable.initializer {
|
match variable.initializer {
|
||||||
None => {}
|
None => {}
|
||||||
Some(init) => {
|
Some(init) => {
|
||||||
|
@ -1103,27 +1067,12 @@ fn emit_value_copy(
|
||||||
dst: Id,
|
dst: Id,
|
||||||
) -> Result<(), TranslateError> {
|
) -> Result<(), TranslateError> {
|
||||||
let builder = ctx.builder.get();
|
let builder = ctx.builder.get();
|
||||||
let llvm_type = get_llvm_type(ctx, type_)?;
|
let type_ = get_llvm_type(ctx, type_)?;
|
||||||
let (temp_value, (width, value_i8)) = emit_alloca(
|
let temp_value = emit_alloca(ctx, type_, ctx.constants.private_space, None);
|
||||||
ctx,
|
|
||||||
(llvm_type, type_.layout().size()),
|
|
||||||
ctx.constants.private_space,
|
|
||||||
None,
|
|
||||||
)?;
|
|
||||||
unsafe { LLVMBuildStore(builder, src, temp_value) };
|
unsafe { LLVMBuildStore(builder, src, temp_value) };
|
||||||
ctx.names.register_result(dst, |dst| unsafe {
|
ctx.names.register_result(dst, |dst| unsafe {
|
||||||
LLVMBuildLoad2(builder, llvm_type, temp_value, dst)
|
LLVMBuildLoad2(builder, type_, temp_value, dst)
|
||||||
});
|
});
|
||||||
unsafe {
|
|
||||||
LLVMBuildCall2(
|
|
||||||
builder,
|
|
||||||
ctx.llvm_lifetime_type,
|
|
||||||
ctx.llvm_lifetime_end,
|
|
||||||
[width, value_i8].as_mut_ptr(),
|
|
||||||
2,
|
|
||||||
LLVM_UNNAMED,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1134,10 +1083,10 @@ fn emit_value_copy(
|
||||||
// be less effective than it could be."
|
// be less effective than it could be."
|
||||||
fn emit_alloca(
|
fn emit_alloca(
|
||||||
ctx: &mut EmitContext,
|
ctx: &mut EmitContext,
|
||||||
(type_, type_size): (LLVMTypeRef, usize),
|
type_: LLVMTypeRef,
|
||||||
addr_space: u32,
|
addr_space: u32,
|
||||||
name: Option<Id>,
|
name: Option<Id>,
|
||||||
) -> Result<(LLVMValueRef, (LLVMValueRef, LLVMValueRef)), TranslateError> {
|
) -> LLVMValueRef {
|
||||||
let builder = ctx.builder.get();
|
let builder = ctx.builder.get();
|
||||||
let current_bb = unsafe { LLVMGetInsertBlock(builder) };
|
let current_bb = unsafe { LLVMGetInsertBlock(builder) };
|
||||||
let variables_bb = unsafe { LLVMGetFirstBasicBlock(LLVMGetBasicBlockParent(current_bb)) };
|
let variables_bb = unsafe { LLVMGetFirstBasicBlock(LLVMGetBasicBlockParent(current_bb)) };
|
||||||
|
@ -1146,36 +1095,7 @@ fn emit_alloca(
|
||||||
LLVMZludaBuildAlloca(builder, type_, addr_space, name)
|
LLVMZludaBuildAlloca(builder, type_, addr_space, name)
|
||||||
});
|
});
|
||||||
unsafe { LLVMPositionBuilderAtEnd(builder, current_bb) };
|
unsafe { LLVMPositionBuilderAtEnd(builder, current_bb) };
|
||||||
let width = unsafe {
|
result
|
||||||
LLVMConstInt(
|
|
||||||
LLVMInt64TypeInContext(ctx.context.get()),
|
|
||||||
type_size as u64,
|
|
||||||
0,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
let result_i8 = unsafe {
|
|
||||||
LLVMBuildPointerCast(
|
|
||||||
builder,
|
|
||||||
result,
|
|
||||||
get_llvm_pointer_type(
|
|
||||||
ctx,
|
|
||||||
&ast::Type::Scalar(ast::ScalarType::B8),
|
|
||||||
ast::StateSpace::Reg,
|
|
||||||
)?,
|
|
||||||
LLVM_UNNAMED,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
unsafe {
|
|
||||||
LLVMBuildCall2(
|
|
||||||
builder,
|
|
||||||
ctx.llvm_lifetime_type,
|
|
||||||
ctx.llvm_lifetime_start,
|
|
||||||
[width, result_i8].as_mut_ptr(),
|
|
||||||
2,
|
|
||||||
LLVM_UNNAMED,
|
|
||||||
)
|
|
||||||
};
|
|
||||||
Ok((result, (width, result_i8)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn emit_instruction(
|
fn emit_instruction(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue