diff options
| author | gingerBill <ginger.bill.22@gmail.com> | 2016-08-16 20:08:40 +0100 |
|---|---|---|
| committer | gingerBill <ginger.bill.22@gmail.com> | 2016-08-16 20:08:40 +0100 |
| commit | e8530ca883edd79c188443ced54cea2c5d3ad4ed (patch) | |
| tree | 4e264d51cbbbe41f0dc7eed16bcdbb73f372c844 /src/codegen | |
| parent | 2d49a615630eb27d95c7cde67722f419a1977996 (diff) | |
Win32 Demo: OpenGL Context
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/print_llvm.cpp | 10 | ||||
| -rw-r--r-- | src/codegen/ssa.cpp | 7 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/codegen/print_llvm.cpp b/src/codegen/print_llvm.cpp index 36b9156de..4c358f31b 100644 --- a/src/codegen/print_llvm.cpp +++ b/src/codegen/print_llvm.cpp @@ -210,7 +210,15 @@ void ssa_print_exact_value(gbFile *f, ssaModule *m, ExactValue value, Type *type ssa_fprintf(f, "\""); } break; case ExactValue_Integer: { - ssa_fprintf(f, "%lld", value.value_integer); + if (is_type_pointer(get_base_type(type))) { + if (value.value_integer == 0) { + ssa_fprintf(f, "null"); + } else { + GB_PANIC("TODO(bill): Pointer constant"); + } + } else { + ssa_fprintf(f, "%lld", value.value_integer); + } } break; case ExactValue_Float: { u64 u = *cast(u64*)&value.value_float; diff --git a/src/codegen/ssa.cpp b/src/codegen/ssa.cpp index 3e19e5932..f6497fc81 100644 --- a/src/codegen/ssa.cpp +++ b/src/codegen/ssa.cpp @@ -1355,6 +1355,11 @@ ssaValue *ssa_emit_conv(ssaProcedure *proc, ssaValue *value, Type *t) { return ssa_emit(proc, ssa_make_instr_conv(proc, ssaConv_bitcast, value, src, dst)); } + // proc <-> proc + if (is_type_proc(src) && is_type_proc(dst)) { + return ssa_emit(proc, ssa_make_instr_conv(proc, ssaConv_bitcast, value, src, dst)); + } + // []byte/[]u8 <-> string if (is_type_u8_slice(src) && is_type_string(dst)) { @@ -1743,7 +1748,7 @@ ssaValue *ssa_build_single_expr(ssaProcedure *proc, AstNode *expr, TypeAndValue // NOTE(bill): Regular call ssaValue *value = ssa_build_expr(proc, ce->proc); - Type *proc_type_ = ssa_value_type(value); + Type *proc_type_ = get_base_type(ssa_value_type(value)); GB_ASSERT(proc_type_->kind == Type_Proc); auto *type = &proc_type_->proc; |