Minor compiler improvements

This commit is contained in:
Andrzej Janik 2025-09-22 20:29:22 +00:00
commit 48e20d06bf
2 changed files with 24 additions and 25 deletions

View file

@ -1672,25 +1672,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 {
@ -2216,7 +2214,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(())
@ -2677,14 +2675,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(())
} }

View file

@ -226,8 +226,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 {