[PATCH] D71657: [SDAG] Handle BUILD_PAIR in ComputeNumSignBits

Danila Malyutin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 23 09:25:05 PST 2019


danilaml added a comment.

One of the motivating examples (not sure how stable this IR to use as a test) is something like this (needs `-mllvm -disable-cgp` to prevent `sext` sinking):

  define i64 @foo(i32 %a, i32 %b) local_unnamed_addr {
  entry:
    %conv6 = sext i32 %a to i64
    %conv17 = sext i32 %b to i64
    %add = add i64 %conv6, 42
    %cmp0 = icmp slt i64 %conv17, %add
    br i1 %cmp0, label %exit, label %exit2 ; branch to prevent bb merging
  
  exit:
    %mul = mul nsw i64 %conv6, %conv17
    ret i64 %mul
  exit2:
    ret i64 0
  }

On 32-bit target %conv* would be copyFromReg'ed across BBs in the DAG in a pair of registers. Without knowing that ComputeNumSignBits for their build_pair is 33 (since it's just a copy from sext i32 to i64), LLVM won't generate smul_lohi.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71657/new/

https://reviews.llvm.org/D71657





More information about the llvm-commits mailing list