mirror of
https://github.com/vosen/ZLUDA.git
synced 2025-09-27 03:39:10 +00:00
Minor compiler improvements
This commit is contained in:
parent
18a2b765f7
commit
3bad9852a5
2 changed files with 25 additions and 26 deletions
|
@ -1656,25 +1656,23 @@ impl<'a> MethodEmitContext<'a> {
|
||||||
.ok_or_else(|| error_mismatched_type())?,
|
.ok_or_else(|| error_mismatched_type())?,
|
||||||
);
|
);
|
||||||
let src2 = self.resolver.value(src2)?;
|
let src2 = self.resolver.value(src2)?;
|
||||||
self.resolver.with_result(arguments.dst, |dst| {
|
let vec = unsafe {
|
||||||
let vec = unsafe {
|
LLVMBuildInsertElement(
|
||||||
LLVMBuildInsertElement(
|
self.builder,
|
||||||
self.builder,
|
LLVMGetPoison(dst_type),
|
||||||
LLVMGetPoison(dst_type),
|
llvm_fn(self.builder, src, packed_type, LLVM_UNNAMED.as_ptr()),
|
||||||
llvm_fn(self.builder, src, packed_type, LLVM_UNNAMED.as_ptr()),
|
LLVMConstInt(LLVMInt32TypeInContext(self.context), 1, false as i32),
|
||||||
LLVMConstInt(LLVMInt32TypeInContext(self.context), 1, false as i32),
|
LLVM_UNNAMED.as_ptr(),
|
||||||
LLVM_UNNAMED.as_ptr(),
|
)
|
||||||
)
|
};
|
||||||
};
|
self.resolver.with_result(arguments.dst, |dst| unsafe {
|
||||||
unsafe {
|
LLVMBuildInsertElement(
|
||||||
LLVMBuildInsertElement(
|
self.builder,
|
||||||
self.builder,
|
vec,
|
||||||
vec,
|
llvm_fn(self.builder, src2, packed_type, LLVM_UNNAMED.as_ptr()),
|
||||||
llvm_fn(self.builder, src2, packed_type, LLVM_UNNAMED.as_ptr()),
|
LLVMConstInt(LLVMInt32TypeInContext(self.context), 0, false as i32),
|
||||||
LLVMConstInt(LLVMInt32TypeInContext(self.context), 0, false as i32),
|
dst,
|
||||||
dst,
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
self.resolver.with_result(arguments.dst, |dst| unsafe {
|
self.resolver.with_result(arguments.dst, |dst| unsafe {
|
||||||
|
@ -2200,7 +2198,7 @@ impl<'a> MethodEmitContext<'a> {
|
||||||
Some(&ast::ScalarType::F32.into()),
|
Some(&ast::ScalarType::F32.into()),
|
||||||
vec![(
|
vec![(
|
||||||
self.resolver.value(arguments.src)?,
|
self.resolver.value(arguments.src)?,
|
||||||
get_scalar_type(self.context, ast::ScalarType::F32.into()),
|
get_scalar_type(self.context, ast::ScalarType::F32),
|
||||||
)],
|
)],
|
||||||
)?;
|
)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -2703,14 +2701,14 @@ impl<'a> MethodEmitContext<'a> {
|
||||||
|
|
||||||
let load = unsafe { LLVMBuildLoad2(self.builder, from_type, from, LLVM_UNNAMED.as_ptr()) };
|
let load = unsafe { LLVMBuildLoad2(self.builder, from_type, from, LLVM_UNNAMED.as_ptr()) };
|
||||||
unsafe {
|
unsafe {
|
||||||
LLVMSetAlignment(load, (cp_size.as_u64() as u32) * 8);
|
LLVMSetAlignment(load, cp_size.as_u64() as u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
let extended = unsafe { LLVMBuildZExt(self.builder, load, to_type, LLVM_UNNAMED.as_ptr()) };
|
let extended = unsafe { LLVMBuildZExt(self.builder, load, to_type, LLVM_UNNAMED.as_ptr()) };
|
||||||
|
|
||||||
unsafe { LLVMBuildStore(self.builder, extended, to) };
|
let store = unsafe { LLVMBuildStore(self.builder, extended, to) };
|
||||||
unsafe {
|
unsafe {
|
||||||
LLVMSetAlignment(load, (cp_size.as_u64() as u32) * 8);
|
LLVMSetAlignment(store, cp_size.as_u64() as u32);
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -2990,7 +2988,7 @@ fn get_scope_membar(scope: ast::MemScope) -> Result<*const i8, TranslateError> {
|
||||||
Ok(match scope {
|
Ok(match scope {
|
||||||
ast::MemScope::Cta => c"workgroup",
|
ast::MemScope::Cta => c"workgroup",
|
||||||
ast::MemScope::Gpu => c"agent",
|
ast::MemScope::Gpu => c"agent",
|
||||||
ast::MemScope::Sys => c"",
|
ast::MemScope::Sys => c"system",
|
||||||
ast::MemScope::Cluster => todo!(),
|
ast::MemScope::Cluster => todo!(),
|
||||||
}
|
}
|
||||||
.as_ptr())
|
.as_ptr())
|
||||||
|
|
|
@ -227,8 +227,9 @@ fn int_immediate<'a, 'input>(input: &mut PtxParser<'a, 'input>) -> PResult<ast::
|
||||||
take_error((opt(Token::Minus), num).map(|(neg, x)| {
|
take_error((opt(Token::Minus), num).map(|(neg, x)| {
|
||||||
let (num, radix, is_unsigned) = x;
|
let (num, radix, is_unsigned) = x;
|
||||||
if neg.is_some() {
|
if neg.is_some() {
|
||||||
match i64::from_str_radix(num, radix) {
|
let full_number = format!("-{num}");
|
||||||
Ok(x) => Ok(ast::ImmediateValue::S64(-x)),
|
match i64::from_str_radix(&full_number, radix) {
|
||||||
|
Ok(x) => Ok(ast::ImmediateValue::S64(x)),
|
||||||
Err(err) => Err((ast::ImmediateValue::S64(0), PtxError::from(err))),
|
Err(err) => Err((ast::ImmediateValue::S64(0), PtxError::from(err))),
|
||||||
}
|
}
|
||||||
} else if is_unsigned {
|
} else if is_unsigned {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue