From bf6972c3816dc81b167317a94487d5b9d2c88db0 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 17 Dec 2018 15:49:30 -0600 Subject: Fix i64 select lowering. (#1773) --- src/passes/I64ToI32Lowering.cpp | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/passes/I64ToI32Lowering.cpp b/src/passes/I64ToI32Lowering.cpp index 200cebedb..4575dd2f8 100644 --- a/src/passes/I64ToI32Lowering.cpp +++ b/src/passes/I64ToI32Lowering.cpp @@ -235,9 +235,7 @@ struct I64ToI32Lowering : public WalkerPass> { setOutParam(curr, std::move(highBits)); } - // If and Select have identical code - template - void visitBranching(T* curr) { + void visitIf(If* curr) { if (!hasOutParam(curr->ifTrue)) return; assert(curr->ifFalse != nullptr && "Nullable ifFalse found"); TempVar highBits = fetchOutParam(curr->ifTrue); @@ -255,10 +253,6 @@ struct I64ToI32Lowering : public WalkerPass> { setOutParam(curr, std::move(highBits)); } - void visitIf(If* curr) { - visitBranching(curr); - } - void visitLoop(Loop* curr) { assert(labelHighBitVars.find(curr->name) == labelHighBitVars.end()); if (curr->type != i64) return; @@ -1526,7 +1520,36 @@ struct I64ToI32Lowering : public WalkerPass> { } void visitSelect(Select* curr) { - visitBranching