summaryrefslogtreecommitdiff
path: root/src/passes/I64ToI32Lowering.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/I64ToI32Lowering.cpp')
-rw-r--r--src/passes/I64ToI32Lowering.cpp334
1 files changed, 167 insertions, 167 deletions
diff --git a/src/passes/I64ToI32Lowering.cpp b/src/passes/I64ToI32Lowering.cpp
index e61e4055e..e893b6296 100644
--- a/src/passes/I64ToI32Lowering.cpp
+++ b/src/passes/I64ToI32Lowering.cpp
@@ -127,8 +127,8 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
c->value = Literal(uint32_t(value));
c->type = i32;
high->init = builder->makeConst(Literal(uint32_t(value >> 32)));
- } else if (auto* get = curr->init->dynCast<GetGlobal>()) {
- high->init = builder->makeGetGlobal(makeHighName(get->name), i32);
+ } else if (auto* get = curr->init->dynCast<GlobalGet>()) {
+ high->init = builder->makeGlobalGet(makeHighName(get->name), i32);
} else {
WASM_UNREACHABLE();
}
@@ -213,10 +213,10 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
if (hasOutParam(func->body)) {
TempVar highBits = fetchOutParam(func->body);
TempVar lowBits = getTemp();
- SetLocal* setLow = builder->makeSetLocal(lowBits, func->body);
- SetGlobal* setHigh = builder->makeSetGlobal(
- INT64_TO_32_HIGH_BITS, builder->makeGetLocal(highBits, i32));
- GetLocal* getLow = builder->makeGetLocal(lowBits, i32);
+ LocalSet* setLow = builder->makeLocalSet(lowBits, func->body);
+ GlobalSet* setHigh = builder->makeGlobalSet(
+ INT64_TO_32_HIGH_BITS, builder->makeLocalGet(highBits, i32));
+ LocalGet* getLow = builder->makeLocalGet(lowBits, i32);
func->body = builder->blockify(setLow, setHigh, getLow);
}
}
@@ -240,7 +240,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
args.push_back(e);
if (hasOutParam(e)) {
TempVar argHighBits = fetchOutParam(e);
- args.push_back(builder->makeGetLocal(argHighBits, i32));
+ args.push_back(builder->makeLocalGet(argHighBits, i32));
fixed = true;
}
}
@@ -252,10 +252,10 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar lowBits = getTemp();
TempVar highBits = getTemp();
auto* call = callBuilder(args, i32);
- SetLocal* doCall = builder->makeSetLocal(lowBits, call);
- SetLocal* setHigh = builder->makeSetLocal(
- highBits, builder->makeGetGlobal(INT64_TO_32_HIGH_BITS, i32));
- GetLocal* getLow = builder->makeGetLocal(lowBits, i32);
+ LocalSet* doCall = builder->makeLocalSet(lowBits, call);
+ LocalSet* setHigh = builder->makeLocalSet(
+ highBits, builder->makeGlobalGet(INT64_TO_32_HIGH_BITS, i32));
+ LocalGet* getLow = builder->makeLocalGet(lowBits, i32);
Block* result = builder->blockify(doCall, setHigh, getLow);
setOutParam(result, std::move(highBits));
replaceCurrent(result);
@@ -282,7 +282,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
});
}
- void visitGetLocal(GetLocal* curr) {
+ void visitLocalGet(LocalGet* curr) {
const auto mappedIndex = indexMap[curr->index];
// Need to remap the local into the new naming scheme, regardless of
// the type of the local.
@@ -292,27 +292,27 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
curr->type = i32;
TempVar highBits = getTemp();
- SetLocal* setHighBits = builder->makeSetLocal(
- highBits, builder->makeGetLocal(mappedIndex + 1, i32));
+ LocalSet* setHighBits = builder->makeLocalSet(
+ highBits, builder->makeLocalGet(mappedIndex + 1, i32));
Block* result = builder->blockify(setHighBits, curr);
replaceCurrent(result);
setOutParam(result, std::move(highBits));
}
- void lowerTee(SetLocal* curr) {
+ void lowerTee(LocalSet* curr) {
TempVar highBits = fetchOutParam(curr->value);
TempVar tmp = getTemp();
curr->type = i32;
- SetLocal* setLow = builder->makeSetLocal(tmp, curr);
- SetLocal* setHigh = builder->makeSetLocal(
- curr->index + 1, builder->makeGetLocal(highBits, i32));
- GetLocal* getLow = builder->makeGetLocal(tmp, i32);
+ LocalSet* setLow = builder->makeLocalSet(tmp, curr);
+ LocalSet* setHigh = builder->makeLocalSet(
+ curr->index + 1, builder->makeLocalGet(highBits, i32));
+ LocalGet* getLow = builder->makeLocalGet(tmp, i32);
Block* result = builder->blockify(setLow, setHigh, getLow);
replaceCurrent(result);
setOutParam(result, std::move(highBits));
}
- void visitSetLocal(SetLocal* curr) {
+ void visitLocalSet(LocalSet* curr) {
const auto mappedIndex = indexMap[curr->index];
// Need to remap the local into the new naming scheme, regardless of
// the type of the local. Note that lowerTee depends on this happening.
@@ -325,13 +325,13 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
return;
}
TempVar highBits = fetchOutParam(curr->value);
- auto* setHigh = builder->makeSetLocal(mappedIndex + 1,
- builder->makeGetLocal(highBits, i32));
+ auto* setHigh = builder->makeLocalSet(mappedIndex + 1,
+ builder->makeLocalGet(highBits, i32));
Block* result = builder->blockify(curr, setHigh);
replaceCurrent(result);
}
- void visitGetGlobal(GetGlobal* curr) {
+ void visitGlobalGet(GlobalGet* curr) {
if (!getFunction()) {
return; // if in a global init, skip - we already handled that.
}
@@ -340,14 +340,14 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
curr->type = i32;
TempVar highBits = getTemp();
- SetLocal* setHighBits = builder->makeSetLocal(
- highBits, builder->makeGetGlobal(makeHighName(curr->name), i32));
+ LocalSet* setHighBits = builder->makeLocalSet(
+ highBits, builder->makeGlobalGet(makeHighName(curr->name), i32));
Block* result = builder->blockify(setHighBits, curr);
replaceCurrent(result);
setOutParam(result, std::move(highBits));
}
- void visitSetGlobal(SetGlobal* curr) {
+ void visitGlobalSet(GlobalSet* curr) {
if (!originallyI64Globals.count(curr->name)) {
return;
}
@@ -355,8 +355,8 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
return;
}
TempVar highBits = fetchOutParam(curr->value);
- auto* setHigh = builder->makeSetGlobal(
- makeHighName(curr->name), builder->makeGetLocal(highBits, i32));
+ auto* setHigh = builder->makeGlobalSet(
+ makeHighName(curr->name), builder->makeLocalGet(highBits, i32));
replaceCurrent(builder->makeSequence(curr, setHigh));
}
@@ -368,35 +368,35 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar lowBits = getTemp();
TempVar highBits = getTemp();
TempVar ptrTemp = getTemp();
- SetLocal* setPtr = builder->makeSetLocal(ptrTemp, curr->ptr);
- SetLocal* loadHigh;
+ LocalSet* setPtr = builder->makeLocalSet(ptrTemp, curr->ptr);
+ LocalSet* loadHigh;
if (curr->bytes == 8) {
- loadHigh = builder->makeSetLocal(
+ loadHigh = builder->makeLocalSet(
highBits,
builder->makeLoad(4,
curr->signed_,
curr->offset + 4,
std::min(uint32_t(curr->align), uint32_t(4)),
- builder->makeGetLocal(ptrTemp, i32),
+ builder->makeLocalGet(ptrTemp, i32),
i32));
} else if (curr->signed_) {
- loadHigh = builder->makeSetLocal(
+ loadHigh = builder->makeLocalSet(
highBits,
builder->makeBinary(ShrSInt32,
- builder->makeGetLocal(lowBits, i32),
+ builder->makeLocalGet(lowBits, i32),
builder->makeConst(Literal(int32_t(31)))));
} else {
- loadHigh = builder->makeSetLocal(highBits,
+ loadHigh = builder->makeLocalSet(highBits,
builder->makeConst(Literal(int32_t(0))));
}
curr->type = i32;
curr->bytes = std::min(curr->bytes, uint8_t(4));
curr->align = std::min(uint32_t(curr->align), uint32_t(4));
- curr->ptr = builder->makeGetLocal(ptrTemp, i32);
+ curr->ptr = builder->makeLocalGet(ptrTemp, i32);
Block* result = builder->blockify(setPtr,
- builder->makeSetLocal(lowBits, curr),
+ builder->makeLocalSet(lowBits, curr),
loadHigh,
- builder->makeGetLocal(lowBits, i32));
+ builder->makeLocalGet(lowBits, i32));
replaceCurrent(result);
setOutParam(result, std::move(highBits));
}
@@ -414,15 +414,15 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
curr->valueType = i32;
if (bytes == 8) {
TempVar ptrTemp = getTemp();
- SetLocal* setPtr = builder->makeSetLocal(ptrTemp, curr->ptr);
- curr->ptr = builder->makeGetLocal(ptrTemp, i32);
+ LocalSet* setPtr = builder->makeLocalSet(ptrTemp, curr->ptr);
+ curr->ptr = builder->makeLocalGet(ptrTemp, i32);
curr->finalize();
Store* storeHigh =
builder->makeStore(4,
curr->offset + 4,
std::min(uint32_t(curr->align), uint32_t(4)),
- builder->makeGetLocal(ptrTemp, i32),
- builder->makeGetLocal(highBits, i32),
+ builder->makeLocalGet(ptrTemp, i32),
+ builder->makeLocalGet(highBits, i32),
i32);
replaceCurrent(builder->blockify(setPtr, curr, storeHigh));
}
@@ -446,8 +446,8 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar highBits = getTemp();
Const* lowVal =
builder->makeConst(Literal(int32_t(curr->value.geti64() & 0xffffffff)));
- SetLocal* setHigh =
- builder->makeSetLocal(highBits,
+ LocalSet* setHigh =
+ builder->makeLocalSet(highBits,
builder->makeConst(Literal(
int32_t(uint64_t(curr->value.geti64()) >> 32))));
Block* result = builder->blockify(setHigh, lowVal);
@@ -461,7 +461,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
auto* result = builder->makeUnary(
EqZInt32,
builder->makeBinary(
- OrInt32, curr->value, builder->makeGetLocal(highBits, i32)));
+ OrInt32, curr->value, builder->makeLocalGet(highBits, i32)));
replaceCurrent(result);
}
@@ -469,7 +469,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
void lowerExtendUInt32(Unary* curr) {
TempVar highBits = getTemp();
Block* result = builder->blockify(
- builder->makeSetLocal(highBits, builder->makeConst(Literal(int32_t(0)))),
+ builder->makeLocalSet(highBits, builder->makeConst(Literal(int32_t(0)))),
curr->value);
setOutParam(result, std::move(highBits));
replaceCurrent(result);
@@ -479,15 +479,15 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar highBits = getTemp();
TempVar lowBits = getTemp();
- SetLocal* setLow = builder->makeSetLocal(lowBits, curr->value);
- SetLocal* setHigh = builder->makeSetLocal(
+ LocalSet* setLow = builder->makeLocalSet(lowBits, curr->value);
+ LocalSet* setHigh = builder->makeLocalSet(
highBits,
builder->makeBinary(ShrSInt32,
- builder->makeGetLocal(lowBits, i32),
+ builder->makeLocalGet(lowBits, i32),
builder->makeConst(Literal(int32_t(31)))));
Block* result =
- builder->blockify(setLow, setHigh, builder->makeGetLocal(lowBits, i32));
+ builder->blockify(setLow, setHigh, builder->makeLocalGet(lowBits, i32));
setOutParam(result, std::move(highBits));
replaceCurrent(result);
@@ -505,7 +505,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar highBits = getTemp();
Block* result = builder->blockify(
builder->makeCall(ABI::wasm2js::SCRATCH_STORE_F64, {curr->value}, none),
- builder->makeSetLocal(
+ builder->makeLocalSet(
highBits,
builder->makeCall(ABI::wasm2js::SCRATCH_LOAD_I32,
{builder->makeConst(Literal(int32_t(1)))},
@@ -529,7 +529,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
none),
builder->makeCall(ABI::wasm2js::SCRATCH_STORE_I32,
{builder->makeConst(Literal(int32_t(1))),
- builder->makeGetLocal(highBits, i32)},
+ builder->makeLocalGet(highBits, i32)},
none),
builder->makeCall(ABI::wasm2js::SCRATCH_LOAD_F64, {}, f64));
replaceCurrent(result);
@@ -606,7 +606,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
builder->makeUnary(
floor,
builder->makeBinary(div,
- builder->makeGetLocal(f, localType),
+ builder->makeLocalGet(f, localType),
builder->makeConst(u32Max))),
builder->makeBinary(
sub, builder->makeConst(u32Max), builder->makeConst(litOne)));
@@ -616,28 +616,28 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
div,
builder->makeBinary(
sub,
- builder->makeGetLocal(f, localType),
+ builder->makeLocalGet(f, localType),
builder->makeUnary(
convert,
- builder->makeUnary(trunc, builder->makeGetLocal(f, localType)))),
+ builder->makeUnary(trunc, builder->makeLocalGet(f, localType)))),
builder->makeConst(u32Max)));
If* highBitsCalc = builder->makeIf(
builder->makeBinary(
- gt, builder->makeGetLocal(f, localType), builder->makeConst(litZero)),
+ gt, builder->makeLocalGet(f, localType), builder->makeConst(litZero)),
builder->makeUnary(trunc, gtZeroBranch),
builder->makeUnary(trunc, ltZeroBranch));
If* highBitsVal = builder->makeIf(
builder->makeBinary(
ge,
- builder->makeUnary(abs, builder->makeGetLocal(f, localType)),
+ builder->makeUnary(abs, builder->makeLocalGet(f, localType)),
builder->makeConst(litOne)),
highBitsCalc,
builder->makeConst(Literal(int32_t(0))));
Block* result = builder->blockify(
- builder->makeSetLocal(f, curr->value),
- builder->makeSetLocal(highBits, highBitsVal),
- builder->makeUnary(trunc, builder->makeGetLocal(f, localType)));
+ builder->makeLocalSet(f, curr->value),
+ builder->makeLocalSet(highBits, highBitsVal),
+ builder->makeUnary(trunc, builder->makeLocalGet(f, localType)));
setOutParam(result, std::move(highBits));
replaceCurrent(result);
}
@@ -674,18 +674,18 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
Expression* result = builder->blockify(
- builder->makeSetLocal(lowBits, curr->value),
- builder->makeSetLocal(highResult,
+ builder->makeLocalSet(lowBits, curr->value),
+ builder->makeLocalSet(highResult,
builder->makeConst(Literal(int32_t(0)))),
builder->makeBinary(
AddFloat64,
builder->makeUnary(ConvertUInt32ToFloat64,
- builder->makeGetLocal(lowBits, i32)),
+ builder->makeLocalGet(lowBits, i32)),
builder->makeBinary(
MulFloat64,
builder->makeConst(Literal((double)UINT_MAX + 1)),
builder->makeUnary(convertHigh,
- builder->makeGetLocal(highBits, i32)))));
+ builder->makeLocalGet(highBits, i32)))));
switch (curr->op) {
case ConvertSInt64ToFloat32:
@@ -707,24 +707,24 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar&& second) {
TempVar highResult = getTemp();
TempVar firstResult = getTemp();
- SetLocal* setFirst = builder->makeSetLocal(
+ LocalSet* setFirst = builder->makeLocalSet(
firstResult,
- builder->makeUnary(op32, builder->makeGetLocal(first, i32)));
+ builder->makeUnary(op32, builder->makeLocalGet(first, i32)));
Binary* check =
builder->makeBinary(EqInt32,
- builder->makeGetLocal(firstResult, i32),
+ builder->makeLocalGet(firstResult, i32),
builder->makeConst(Literal(int32_t(32))));
If* conditional = builder->makeIf(
check,
builder->makeBinary(
AddInt32,
- builder->makeUnary(op32, builder->makeGetLocal(second, i32)),
+ builder->makeUnary(op32, builder->makeLocalGet(second, i32)),
builder->makeConst(Literal(int32_t(32)))),
- builder->makeGetLocal(firstResult, i32));
+ builder->makeLocalGet(firstResult, i32));
- SetLocal* setHigh = builder->makeSetLocal(
+ LocalSet* setHigh = builder->makeLocalSet(
highResult, builder->makeConst(Literal(int32_t(0))));
setOutParam(result, std::move(highResult));
@@ -734,7 +734,7 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar highBits = fetchOutParam(curr->value);
TempVar lowBits = getTemp();
- SetLocal* setLow = builder->makeSetLocal(lowBits, curr->value);
+ LocalSet* setLow = builder->makeLocalSet(lowBits, curr->value);
Block* result = builder->blockify(setLow);
switch (curr->op) {
@@ -834,27 +834,27 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar&& rightHigh) {
TempVar lowResult = getTemp();
TempVar highResult = getTemp();
- SetLocal* addLow = builder->makeSetLocal(
+ LocalSet* addLow = builder->makeLocalSet(
lowResult,
builder->makeBinary(AddInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32)));
- SetLocal* addHigh = builder->makeSetLocal(
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32)));
+ LocalSet* addHigh = builder->makeLocalSet(
highResult,
builder->makeBinary(AddInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32)));
- SetLocal* carryBit = builder->makeSetLocal(
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32)));
+ LocalSet* carryBit = builder->makeLocalSet(
highResult,
builder->makeBinary(AddInt32,
- builder->makeGetLocal(highResult, i32),
+ builder->makeLocalGet(highResult, i32),
builder->makeConst(Literal(int32_t(1)))));
If* checkOverflow =
builder->makeIf(builder->makeBinary(LtUInt32,
- builder->makeGetLocal(lowResult, i32),
- builder->makeGetLocal(rightLow, i32)),
+ builder->makeLocalGet(lowResult, i32),
+ builder->makeLocalGet(rightLow, i32)),
carryBit);
- GetLocal* getLow = builder->makeGetLocal(lowResult, i32);
+ LocalGet* getLow = builder->makeLocalGet(lowResult, i32);
result = builder->blockify(result, addLow, addHigh, checkOverflow, getLow);
setOutParam(result, std::move(highResult));
return result;
@@ -868,27 +868,27 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar lowResult = getTemp();
TempVar highResult = getTemp();
TempVar borrow = getTemp();
- SetLocal* subLow = builder->makeSetLocal(
+ LocalSet* subLow = builder->makeLocalSet(
lowResult,
builder->makeBinary(SubInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32)));
- SetLocal* borrowBit = builder->makeSetLocal(
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32)));
+ LocalSet* borrowBit = builder->makeLocalSet(
borrow,
builder->makeBinary(LtUInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32)));
- SetLocal* subHigh1 = builder->makeSetLocal(
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32)));
+ LocalSet* subHigh1 = builder->makeLocalSet(
highResult,
builder->makeBinary(AddInt32,
- builder->makeGetLocal(borrow, i32),
- builder->makeGetLocal(rightHigh, i32)));
- SetLocal* subHigh2 = builder->makeSetLocal(
+ builder->makeLocalGet(borrow, i32),
+ builder->makeLocalGet(rightHigh, i32)));
+ LocalSet* subHigh2 = builder->makeLocalSet(
highResult,
builder->makeBinary(SubInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(highResult, i32)));
- GetLocal* getLow = builder->makeGetLocal(lowResult, i32);
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(highResult, i32)));
+ LocalGet* getLow = builder->makeLocalGet(lowResult, i32);
result =
builder->blockify(result, subLow, borrowBit, subHigh1, subHigh2, getLow);
setOutParam(result, std::move(highResult));
@@ -917,25 +917,25 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
result = builder->blockify(
result,
- builder->makeSetLocal(
+ builder->makeLocalSet(
rightHigh,
builder->makeBinary(op32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32))),
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32))),
builder->makeBinary(op32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32)));
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32)));
setOutParam(result, std::move(rightHigh));
return result;
}
Block* makeLargeShl(Index highBits, Index leftLow, Index shift) {
return builder->blockify(
- builder->makeSetLocal(
+ builder->makeLocalSet(
highBits,
builder->makeBinary(ShlInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(shift, i32))),
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(shift, i32))),
builder->makeConst(Literal(int32_t(0))));
}
@@ -947,22 +947,22 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
// lo = leftHigh >> (b - 32)
Block* makeLargeShrS(Index highBits, Index leftHigh, Index shift) {
return builder->blockify(
- builder->makeSetLocal(
+ builder->makeLocalSet(
highBits,
builder->makeBinary(ShrSInt32,
- builder->makeGetLocal(leftHigh, i32),
+ builder->makeLocalGet(leftHigh, i32),
builder->makeConst(Literal(int32_t(31))))),
builder->makeBinary(ShrSInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(shift, i32)));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(shift, i32)));
}
Block* makeLargeShrU(Index highBits, Index leftHigh, Index shift) {
return builder->blockify(
- builder->makeSetLocal(highBits, builder->makeConst(Literal(int32_t(0)))),
+ builder->makeLocalSet(highBits, builder->makeConst(Literal(int32_t(0)))),
builder->makeBinary(ShrUInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(shift, i32)));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(shift, i32)));
}
Block* makeSmallShl(Index highBits,
@@ -975,17 +975,17 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
AndInt32,
shiftMask,
builder->makeBinary(
- ShrUInt32, builder->makeGetLocal(leftLow, i32), widthLessShift));
+ ShrUInt32, builder->makeLocalGet(leftLow, i32), widthLessShift));
Binary* shiftHigh =
builder->makeBinary(ShlInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(shift, i32));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(shift, i32));
return builder->blockify(
- builder->makeSetLocal(
+ builder->makeLocalSet(
highBits, builder->makeBinary(OrInt32, shiftedInBits, shiftHigh)),
builder->makeBinary(ShlInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(shift, i32)));
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(shift, i32)));
}
// a >> b where `b` < 32
@@ -1003,17 +1003,17 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
Binary* shiftedInBits = builder->makeBinary(
ShlInt32,
builder->makeBinary(
- AndInt32, shiftMask, builder->makeGetLocal(leftHigh, i32)),
+ AndInt32, shiftMask, builder->makeLocalGet(leftHigh, i32)),
widthLessShift);
Binary* shiftLow = builder->makeBinary(ShrUInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(shift, i32));
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(shift, i32));
return builder->blockify(
- builder->makeSetLocal(
+ builder->makeLocalSet(
highBits,
builder->makeBinary(ShrSInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(shift, i32))),
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(shift, i32))),
builder->makeBinary(OrInt32, shiftedInBits, shiftLow));
}
@@ -1026,17 +1026,17 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
Binary* shiftedInBits = builder->makeBinary(
ShlInt32,
builder->makeBinary(
- AndInt32, shiftMask, builder->makeGetLocal(leftHigh, i32)),
+ AndInt32, shiftMask, builder->makeLocalGet(leftHigh, i32)),
widthLessShift);
Binary* shiftLow = builder->makeBinary(ShrUInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(shift, i32));
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(shift, i32));
return builder->blockify(
- builder->makeSetLocal(
+ builder->makeLocalSet(
highBits,
builder->makeBinary(ShrUInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(shift, i32))),
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(shift, i32))),
builder->makeBinary(OrInt32, shiftedInBits, shiftLow));
}
@@ -1055,16 +1055,16 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
// low = leftLow << k
// where k = shift % 32. shift right is similar.
TempVar shift = getTemp();
- SetLocal* setShift = builder->makeSetLocal(
+ LocalSet* setShift = builder->makeLocalSet(
shift,
builder->makeBinary(AndInt32,
- builder->makeGetLocal(rightLow, i32),
+ builder->makeLocalGet(rightLow, i32),
builder->makeConst(Literal(int32_t(32 - 1)))));
Binary* isLargeShift = builder->makeBinary(
LeUInt32,
builder->makeConst(Literal(int32_t(32))),
builder->makeBinary(AndInt32,
- builder->makeGetLocal(rightLow, i32),
+ builder->makeLocalGet(rightLow, i32),
builder->makeConst(Literal(int32_t(64 - 1)))));
Block* largeShiftBlock;
switch (op) {
@@ -1084,12 +1084,12 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
SubInt32,
builder->makeBinary(ShlInt32,
builder->makeConst(Literal(int32_t(1))),
- builder->makeGetLocal(shift, i32)),
+ builder->makeLocalGet(shift, i32)),
builder->makeConst(Literal(int32_t(1))));
Binary* widthLessShift =
builder->makeBinary(SubInt32,
builder->makeConst(Literal(int32_t(32))),
- builder->makeGetLocal(shift, i32));
+ builder->makeLocalGet(shift, i32));
Block* smallShiftBlock;
switch (op) {
case ShlInt64: {
@@ -1127,11 +1127,11 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
builder->makeBinary(
AndInt32,
builder->makeBinary(EqInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32)),
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32)),
builder->makeBinary(EqInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32))));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32))));
}
Block* lowerNe(Block* result,
@@ -1144,11 +1144,11 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
builder->makeBinary(
OrInt32,
builder->makeBinary(NeInt32,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32)),
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32)),
builder->makeBinary(NeInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32))));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32))));
}
Block* lowerUComp(BinaryOp op,
@@ -1180,14 +1180,14 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
Binary* compHigh =
builder->makeBinary(highOp,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32));
Binary* eqHigh = builder->makeBinary(EqInt32,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32));
Binary* compLow = builder->makeBinary(lowOp,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32));
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32));
return builder->blockify(
result,
builder->makeBinary(
@@ -1227,15 +1227,15 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
Binary* compHigh1 =
builder->makeBinary(highOp1,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32));
Binary* compHigh2 =
builder->makeBinary(highOp2,
- builder->makeGetLocal(leftHigh, i32),
- builder->makeGetLocal(rightHigh, i32));
+ builder->makeLocalGet(leftHigh, i32),
+ builder->makeLocalGet(rightHigh, i32));
Binary* compLow = builder->makeBinary(lowOp,
- builder->makeGetLocal(leftLow, i32),
- builder->makeGetLocal(rightLow, i32));
+ builder->makeLocalGet(leftLow, i32),
+ builder->makeLocalGet(rightLow, i32));
If* lowIf = builder->makeIf(compLow,
builder->makeConst(Literal(int32_t(0))),
builder->makeConst(Literal(int32_t(1))));
@@ -1291,8 +1291,8 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar leftHigh = fetchOutParam(curr->left);
TempVar rightLow = getTemp();
TempVar rightHigh = fetchOutParam(curr->right);
- SetLocal* setRight = builder->makeSetLocal(rightLow, curr->right);
- SetLocal* setLeft = builder->makeSetLocal(leftLow, curr->left);
+ LocalSet* setRight = builder->makeLocalSet(rightLow, curr->right);
+ LocalSet* setLeft = builder->makeLocalSet(leftLow, curr->left);
Block* result = builder->blockify(setLeft, setRight);
switch (curr->op) {
case AddInt64: {
@@ -1403,18 +1403,18 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
TempVar lowBits = getTemp();
TempVar cond = getTemp();
Block* result = builder->blockify(
- builder->makeSetLocal(cond, curr->condition),
- builder->makeSetLocal(
+ builder->makeLocalSet(cond, curr->condition),
+ builder->makeLocalSet(
lowBits,
builder->makeSelect(
- builder->makeGetLocal(cond, i32), curr->ifTrue, curr->ifFalse)),
- builder->makeSetLocal(
+ builder->makeLocalGet(cond, i32), curr->ifTrue, curr->ifFalse)),
+ builder->makeLocalSet(
highBits,
builder->makeSelect(
- builder->makeGetLocal(cond, i32),
- builder->makeGetLocal(fetchOutParam(curr->ifTrue), i32),
- builder->makeGetLocal(fetchOutParam(curr->ifFalse), i32))),
- builder->makeGetLocal(lowBits, i32));
+ builder->makeLocalGet(cond, i32),
+ builder->makeLocalGet(fetchOutParam(curr->ifTrue), i32),
+ builder->makeLocalGet(fetchOutParam(curr->ifFalse), i32))),
+ builder->makeLocalGet(lowBits, i32));
setOutParam(result, std::move(highBits));
replaceCurrent(result);
}
@@ -1433,10 +1433,10 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> {
}
TempVar lowBits = getTemp();
TempVar highBits = fetchOutParam(curr->value);
- SetLocal* setLow = builder->makeSetLocal(lowBits, curr->value);
- SetGlobal* setHigh = builder->makeSetGlobal(
- INT64_TO_32_HIGH_BITS, builder->makeGetLocal(highBits, i32));
- curr->value = builder->makeGetLocal(lowBits, i32);
+ LocalSet* setLow = builder->makeLocalSet(lowBits, curr->value);
+ GlobalSet* setHigh = builder->makeGlobalSet(
+ INT64_TO_32_HIGH_BITS, builder->makeLocalGet(highBits, i32));
+ curr->value = builder->makeLocalGet(lowBits, i32);
Block* result = builder->blockify(setLow, setHigh, curr);
replaceCurrent(result);
}