aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--src/llvm.cff13
2 files changed, 9 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 72d7007..0ac38e4 100644
--- a/Makefile
+++ b/Makefile
@@ -37,6 +37,6 @@ build/%.o: %.cff
@echo -e '\e[1mCFFC\e[0m' '\e[32m'"$<"'\e[0m' '->' '\e[34m'"$@"'\e[0m'
$V$(CFFC) $< -o $@.ll
$Vset -euo pipefail;\
- (opt -Oz -opaque-pointers $@.ll | llc --relocation-model=pic -opaque-pointers | as - -o $@) || ($(RM) $@; false)
+ (opt -O0 -opaque-pointers $@.ll | llc --relocation-model=dynamic-no-pic -opaque-pointers | as - -o $@) || ($(RM) $@; false)
diff --git a/src/llvm.cff b/src/llvm.cff
index 789db91..def9346 100644
--- a/src/llvm.cff
+++ b/src/llvm.cff
@@ -572,7 +572,8 @@ fn genexpr(f *Fn, ex *Expr) Value {
let $l = gentmp(ty_isize, "ptrtoint ptr %v to %t", &lhs, ty_isize);
let $r = gentmp(ty_isize, "ptrtoint ptr %v to %t", &rhs, ty_isize);
let $diff = gentmp(ty_isize, "sub %t %v, %v", ty_isize, &$l, &$r);
- let $res = gentmp(ty_isize, "sdiv %t %v, %v", ty_isize, &$l, &$r);
+ let $res = gentmp(ty_isize, "sdiv %t %v, %z", ty_isize, &$diff,
+ lhs.ty.u.Ptr == ty_void ? 1 : lhs.ty.u.Ptr.size);
return $res;
} else {
assert(#f, "bad sub");
@@ -619,7 +620,6 @@ fn genexpr(f *Fn, ex *Expr) Value {
case '=';
let ref = genref(f, b.lhs);
let rhs = convert(f, b.lhs.ty, b.rhs);
- gen("; %t\n",b.lhs.ty);
genstore(f, ref, rhs);
return genload(f, ref); // load again because value could have overflowed when storing it
@@ -1080,18 +1080,21 @@ fn genstmt(f *Fn, block *Block, st *Stmt) void {
case For loop;
genblock(f, loop.ini);
- gen("\tbr label %%Cont%d\n", loop.id);
- gen("Cont%d:", loop.id);
+ gen("\tbr label %%Test%d\n", loop.id);
+ gen("Test%d:", loop.id);
nop();
let test = llvmbool(f, &loop.test);
gen("\tbr i1 %v, label %%Next%d, label %%Brk%d\n", &test, loop.id, loop.id);
gen("Next%d:", loop.id);
nop();
genblock(f, loop.body);
+ gen("\tbr label %%Cont%d\n", loop.id);
+ gen("Cont%d:", loop.id);
+ nop();
if !loop.next->empty() {
genexpr(f, &loop.next.Some);
}
- gen("\tbr label %%Cont%d\n", loop.id);
+ gen("\tbr label %%Test%d\n", loop.id);
gen("Brk%d:",loop.id);
nop();