mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Fix intrinsics.non_temporal_{load, store}
This commit is contained in:
@@ -2117,10 +2117,14 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
|||||||
|
|
||||||
LLVMValueRef instr = LLVMBuildStore(p->builder, val.value, dst.value);
|
LLVMValueRef instr = LLVMBuildStore(p->builder, val.value, dst.value);
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case BuiltinProc_volatile_store: LLVMSetVolatile(instr, true); break;
|
|
||||||
case BuiltinProc_non_temporal_store:
|
case BuiltinProc_non_temporal_store:
|
||||||
// TODO(bill): BuiltinProc_non_temporal_store
|
{
|
||||||
|
unsigned kind_id = LLVMGetMDKindIDInContext(p->module->ctx, "nontemporal", 11);
|
||||||
|
LLVMMetadataRef node = LLVMValueAsMetadata(LLVMConstInt(lb_type(p->module, t_u32), 1, false));
|
||||||
|
LLVMSetMetadata(instr, kind_id, LLVMMetadataAsValue(p->module->ctx, node));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
case BuiltinProc_volatile_store: LLVMSetVolatile(instr, true); break;
|
||||||
case BuiltinProc_atomic_store: LLVMSetOrdering(instr, LLVMAtomicOrderingSequentiallyConsistent); break;
|
case BuiltinProc_atomic_store: LLVMSetOrdering(instr, LLVMAtomicOrderingSequentiallyConsistent); break;
|
||||||
case BuiltinProc_atomic_store_explicit: LLVMSetOrdering(instr, llvm_atomic_ordering_from_odin(ce->args[2])); break;
|
case BuiltinProc_atomic_store_explicit: LLVMSetOrdering(instr, llvm_atomic_ordering_from_odin(ce->args[2])); break;
|
||||||
}
|
}
|
||||||
@@ -2138,10 +2142,15 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv,
|
|||||||
|
|
||||||
LLVMValueRef instr = LLVMBuildLoad(p->builder, dst.value, "");
|
LLVMValueRef instr = LLVMBuildLoad(p->builder, dst.value, "");
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case BuiltinProc_volatile_load: LLVMSetVolatile(instr, true); break;
|
|
||||||
case BuiltinProc_non_temporal_load:
|
case BuiltinProc_non_temporal_load:
|
||||||
// TODO(bill): BuiltinProc_non_temporal_load
|
{
|
||||||
|
unsigned kind_id = LLVMGetMDKindIDInContext(p->module->ctx, "nontemporal", 11);
|
||||||
|
LLVMMetadataRef node = LLVMValueAsMetadata(LLVMConstInt(lb_type(p->module, t_u32), 1, false));
|
||||||
|
LLVMSetMetadata(instr, kind_id, LLVMMetadataAsValue(p->module->ctx, node));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
break;
|
||||||
|
case BuiltinProc_volatile_load: LLVMSetVolatile(instr, true); break;
|
||||||
case BuiltinProc_atomic_load: LLVMSetOrdering(instr, LLVMAtomicOrderingSequentiallyConsistent); break;
|
case BuiltinProc_atomic_load: LLVMSetOrdering(instr, LLVMAtomicOrderingSequentiallyConsistent); break;
|
||||||
case BuiltinProc_atomic_load_explicit: LLVMSetOrdering(instr, llvm_atomic_ordering_from_odin(ce->args[1])); break;
|
case BuiltinProc_atomic_load_explicit: LLVMSetOrdering(instr, llvm_atomic_ordering_from_odin(ce->args[1])); break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user