aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-02-04 22:12:06 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-02-04 22:12:06 -0500
commitb840184bb09b9d5e4272f848dcaa7c4973dfdcd5 (patch)
treefb0be751a985d6b52c173da49692171e61e935e2 /src/codegen.cpp
parent419e75eb2313b4910921185211201317cbbb400c (diff)
downloadzig-b840184bb09b9d5e4272f848dcaa7c4973dfdcd5.tar.gz
zig-b840184bb09b9d5e4272f848dcaa7c4973dfdcd5.zip
memcpy and memset builtins support volatile pointers
See #238
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 1311dd57e0..9ade5cda42 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -1804,7 +1804,10 @@ static LLVMValueRef ir_render_memset(CodeGen *g, IrExecutable *executable, IrIns
LLVMValueRef dest_ptr_casted = LLVMBuildBitCast(g->builder, dest_ptr, ptr_u8, "");
- LLVMValueRef is_volatile = instruction->is_volatile ?
+ TypeTableEntry *ptr_type = get_underlying_type(instruction->dest_ptr->value.type);
+ assert(ptr_type->id == TypeTableEntryIdPointer);
+
+ LLVMValueRef is_volatile = ptr_type->data.pointer.is_volatile ?
LLVMConstAllOnes(LLVMInt1Type()) : LLVMConstNull(LLVMInt1Type());
LLVMValueRef params[] = {
@@ -1829,7 +1832,13 @@ static LLVMValueRef ir_render_memcpy(CodeGen *g, IrExecutable *executable, IrIns
LLVMValueRef dest_ptr_casted = LLVMBuildBitCast(g->builder, dest_ptr, ptr_u8, "");
LLVMValueRef src_ptr_casted = LLVMBuildBitCast(g->builder, src_ptr, ptr_u8, "");
- LLVMValueRef is_volatile = instruction->is_volatile ?
+ TypeTableEntry *dest_ptr_type = get_underlying_type(instruction->dest_ptr->value.type);
+ TypeTableEntry *src_ptr_type = get_underlying_type(instruction->src_ptr->value.type);
+
+ assert(dest_ptr_type->id == TypeTableEntryIdPointer);
+ assert(src_ptr_type->id == TypeTableEntryIdPointer);
+
+ LLVMValueRef is_volatile = (dest_ptr_type->data.pointer.is_volatile || src_ptr_type->data.pointer.is_volatile) ?
LLVMConstAllOnes(LLVMInt1Type()) : LLVMConstNull(LLVMInt1Type());
LLVMValueRef params[] = {