[PATCH] D67071: [CodeGen] Handle SMULFIXSAT with scale zero in TargetLowering::expandFixedPointMul

Bjorn Pettersson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 2 04:44:36 PDT 2019


bjope created this revision.
bjope added reviewers: RKSimon, bevinh, leonardchan.
Herald added subscribers: jsji, MaskRay, hiraditya, nemanjai.
Herald added a project: LLVM.

Normally TargetLowering::expandFixedPointMul would handle
SMULFIXSAT with scale zero by using an SMULO to compute the
product and determine if saturation is needed (if overflow
happened). But if SMULO isn't custom/legal it falls through
and uses the same technique, using MULHS/SMUL_LOHI, as used
for non-zero scales.

Problem was that when checking for overflow (handling saturation)
when not using MULO we did not expect to find a zero scale. So
we ended up in an assertion when doing

  APInt::getLowBitsSet(VTSize, Scale - 1)

This patch fixes the problem by adding a new special case for
how saturation is computed when scale is zero.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D67071

Files:
  llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
  llvm/test/CodeGen/PowerPC/smulfixsat.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D67071.218333.patch
Type: text/x-patch
Size: 4217 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190902/cf571937/attachment.bin>


More information about the llvm-commits mailing list