aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorJosh Wolfe <thejoshwolfe@gmail.com>2015-12-12 17:03:44 -0700
committerJosh Wolfe <thejoshwolfe@gmail.com>2015-12-12 17:07:43 -0700
commit64dd0b8d9535672484512a4a9957a63c08a32f3f (patch)
treedf77022689ae2a31f438891a6679605cba582e53 /src/codegen.cpp
parent38f12adbda5d3b0114232fdccdbcc0b4179f9115 (diff)
downloadzig-64dd0b8d9535672484512a4a9957a63c08a32f3f.tar.gz
zig-64dd0b8d9535672484512a4a9957a63c08a32f3f.zip
fix a + b + c and similar
fix || and && closes #17
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp16
1 files changed, 4 insertions, 12 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 7329f53d91..e5f938a52c 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -485,22 +485,18 @@ static LLVMValueRef gen_bool_and_expr(CodeGen *g, AstNode *node) {
// block for when val1 == false (don't even evaluate the second part)
LLVMBasicBlockRef false_block = LLVMAppendBasicBlock(g->cur_fn->fn_value, "BoolAndFalse");
- LLVMValueRef zero = LLVMConstNull(LLVMTypeOf(val1));
add_debug_source_node(g, node);
- LLVMValueRef val1_i1 = LLVMBuildICmp(g->builder, LLVMIntEQ, val1, zero, "");
- LLVMBuildCondBr(g->builder, val1_i1, false_block, true_block);
+ LLVMBuildCondBr(g->builder, val1, true_block, false_block);
LLVMPositionBuilderAtEnd(g->builder, true_block);
LLVMValueRef val2 = gen_expr(g, node->data.bin_op_expr.op2);
add_debug_source_node(g, node);
- LLVMValueRef val2_i1 = LLVMBuildICmp(g->builder, LLVMIntEQ, val2, zero, "");
LLVMBuildBr(g->builder, false_block);
LLVMPositionBuilderAtEnd(g->builder, false_block);
add_debug_source_node(g, node);
LLVMValueRef phi = LLVMBuildPhi(g->builder, LLVMInt1Type(), "");
- LLVMValueRef one_i1 = LLVMConstAllOnes(LLVMInt1Type());
- LLVMValueRef incoming_values[2] = {one_i1, val2_i1};
+ LLVMValueRef incoming_values[2] = {val1, val2};
LLVMBasicBlockRef incoming_blocks[2] = {orig_block, true_block};
LLVMAddIncoming(phi, incoming_values, incoming_blocks, 2);
@@ -519,22 +515,18 @@ static LLVMValueRef gen_bool_or_expr(CodeGen *g, AstNode *expr_node) {
// block for when val1 == true (don't even evaluate the second part)
LLVMBasicBlockRef true_block = LLVMAppendBasicBlock(g->cur_fn->fn_value, "BoolOrTrue");
- LLVMValueRef zero = LLVMConstNull(LLVMTypeOf(val1));
add_debug_source_node(g, expr_node);
- LLVMValueRef val1_i1 = LLVMBuildICmp(g->builder, LLVMIntEQ, val1, zero, "");
- LLVMBuildCondBr(g->builder, val1_i1, false_block, true_block);
+ LLVMBuildCondBr(g->builder, val1, true_block, false_block);
LLVMPositionBuilderAtEnd(g->builder, false_block);
LLVMValueRef val2 = gen_expr(g, expr_node->data.bin_op_expr.op2);
add_debug_source_node(g, expr_node);
- LLVMValueRef val2_i1 = LLVMBuildICmp(g->builder, LLVMIntEQ, val2, zero, "");
LLVMBuildBr(g->builder, true_block);
LLVMPositionBuilderAtEnd(g->builder, true_block);
add_debug_source_node(g, expr_node);
LLVMValueRef phi = LLVMBuildPhi(g->builder, LLVMInt1Type(), "");
- LLVMValueRef one_i1 = LLVMConstAllOnes(LLVMInt1Type());
- LLVMValueRef incoming_values[2] = {one_i1, val2_i1};
+ LLVMValueRef incoming_values[2] = {val1, val2};
LLVMBasicBlockRef incoming_blocks[2] = {orig_block, false_block};
LLVMAddIncoming(phi, incoming_values, incoming_blocks, 2);