y = rewriter.create<arith::AddIOp>(loc, y, yOffset);
x = rewriter.create<arith::AddIOp>(loc, x, xOffset);
- iy = rewriter.create<arith::DivUIOp>(loc, y, yScaleN);
- ix = rewriter.create<arith::DivUIOp>(loc, x, xScaleN);
+ iy = rewriter.create<arith::DivSIOp>(loc, y, yScaleN);
+ ix = rewriter.create<arith::DivSIOp>(loc, x, xScaleN);
Value tempY = rewriter.create<arith::MulIOp>(loc, iy, yScaleN);
Value tempX = rewriter.create<arith::MulIOp>(loc, ix, xScaleN);
xPred = rewriter.create<arith::CmpFOp>(loc, arith::CmpFPredicate::OGE,
dx, halfVal);
} else {
- Value yScaleNHalfVal =
- rewriter.create<arith::ShRSIOp>(loc, yScaleN, oneVal);
- Value xScaleNHalfVal =
- rewriter.create<arith::ShRSIOp>(loc, xScaleN, oneVal);
+ Value dyDoubled = rewriter.create<arith::ShLIOp>(loc, dy, oneVal);
+ Value dxDoubled = rewriter.create<arith::ShLIOp>(loc, dx, oneVal);
yPred = rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sge,
- dy, yScaleNHalfVal);
+ dyDoubled, yScaleN);
xPred = rewriter.create<arith::CmpIOp>(loc, arith::CmpIPredicate::sge,
- dx, xScaleNHalfVal);
+ dxDoubled, xScaleN);
}
auto yOffset =
// CHECK: %[[TEMP_X:.*]] = arith.muli %[[X]], %[[SCALE_X_D]]
// CHECK: %[[Y:.*]] = arith.addi %[[TEMP_Y]], %[[OFFSET_Y]]
// CHECK: %[[X:.*]] = arith.addi %[[TEMP_X]], %[[OFFSET_X]]
- // CHECK: %[[I_Y:.*]] = arith.divui %[[Y]], %[[SCALE_Y_N]]
- // CHECK: %[[I_X:.*]] = arith.divui %[[X]], %[[SCALE_X_N]]
+ // CHECK: %[[I_Y:.*]] = arith.divsi %[[Y]], %[[SCALE_Y_N]]
+ // CHECK: %[[I_X:.*]] = arith.divsi %[[X]], %[[SCALE_X_N]]
// CHECK: %[[TEMP_Y:.*]] = arith.muli %[[I_Y]], %[[SCALE_Y_N]]
// CHECK: %[[TEMP_X:.*]] = arith.muli %[[I_X]], %[[SCALE_X_N]]
// CHECK: %[[D_Y:.*]] = arith.subi %[[Y]], %[[TEMP_Y]]
// CHECK-DAG: %[[ZERO:.*]] = arith.constant 0
// CHECK-DAG: %[[ONE:.*]] = arith.constant 1
- // CHECK: %[[SCALE_Y_N_HALF:.*]] = arith.shrsi %[[SCALE_Y_N]], %[[ONE]]
- // CHECK: %[[SCALE_X_N_HALF:.*]] = arith.shrsi %[[SCALE_X_N]], %[[ONE]]
- // CHECK: %[[PRED_Y:.*]] = arith.cmpi sge, %[[D_Y]], %[[SCALE_Y_N_HALF]]
- // CHECK: %[[PRED_X:.*]] = arith.cmpi sge, %[[D_X]], %[[SCALE_X_N_HALF]]
+ // CHECK: %[[D_Y_DOUBLE:.*]] = arith.shli %[[D_Y]], %[[ONE]]
+ // CHECK: %[[D_X_DOUBLE:.*]] = arith.shli %[[D_X]], %[[ONE]]
+ // CHECK: %[[PRED_Y:.*]] = arith.cmpi sge, %[[D_Y_DOUBLE]], %[[SCALE_Y_N]]
+ // CHECK: %[[PRED_X:.*]] = arith.cmpi sge, %[[D_X_DOUBLE]], %[[SCALE_X_N]]
// CHECK: %[[VAL_37:.*]] = arith.select %[[PRED_Y]], %[[ONE]], %[[ZERO]]
// CHECK: %[[VAL_38:.*]] = arith.select %[[PRED_X]], %[[ONE]], %[[ZERO]]
// CHECK: %[[VAL_39:.*]] = arith.addi %[[I_Y]], %[[VAL_37]]
// CHECK: %[[TEMP_X:.*]] = arith.muli %[[X]], %[[SCALE_X_D]]
// CHECK: %[[Y:.*]] = arith.addi %[[TEMP_Y]], %[[OFFSET_Y]]
// CHECK: %[[X:.*]] = arith.addi %[[TEMP_X]], %[[OFFSET_X]]
- // CHECK: %[[I_Y:.*]] = arith.divui %[[Y]], %[[SCALE_Y_N]]
- // CHECK: %[[I_X:.*]] = arith.divui %[[X]], %[[SCALE_X_N]]
+ // CHECK: %[[I_Y:.*]] = arith.divsi %[[Y]], %[[SCALE_Y_N]]
+ // CHECK: %[[I_X:.*]] = arith.divsi %[[X]], %[[SCALE_X_N]]
// CHECK: %[[TEMP_Y:.*]] = arith.muli %[[I_Y]], %[[SCALE_Y_N]]
// CHECK: %[[TEMP_X:.*]] = arith.muli %[[I_X]], %[[SCALE_X_N]]
// CHECK: %[[D_Y:.*]] = arith.subi %[[Y]], %[[TEMP_Y]]