diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-02-04 22:12:06 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-02-04 22:12:06 -0500 |
| commit | b840184bb09b9d5e4272f848dcaa7c4973dfdcd5 (patch) | |
| tree | fb0be751a985d6b52c173da49692171e61e935e2 /src/codegen.cpp | |
| parent | 419e75eb2313b4910921185211201317cbbb400c (diff) | |
| download | zig-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.cpp | 13 |
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[] = { |
