Skip to content

Incorrect transformation: (llvm.maximum undef, %x) -> undef #46911

@zhengyang92

Description

@zhengyang92
Bugzilla Link 47567
Resolution FIXED
Resolved on Oct 23, 2020 18:33
Version trunk
OS All
Blocks #47292
CC @efriedma-quic,@jdoerfert,@aqjune,@LebedevRI,@zhengyang92,@RKSimon,@nunoplopes,@regehr,@rotateright

Extended Description

Test case from Transforms/InstSimplify/floating-point-arithmetic.ll

define <2 x double> @​maxnum_nan_op0_vec(<2 x double> %x) {
; CHECK-LABEL: @​maxnum_nan_op0_vec(
; CHECK-NEXT: ret <2 x double> [[X:%.*]]
;
%r = call <2 x double> @​llvm.maxnum.v2f64(<2 x double> <double 0x7ff8000000000000, double undef>, <2 x double> %x)
ret <2 x double> %r
}

The second lane for this case performs the rewrite (llvm.maximum undef, %x) -> undef. The rewrite is illegal. The domain for (llvm.maximum undef, %x) depends on %x, and obviously the result of llvm.maximum does not fully cover the range of undef in most of cases.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzilla

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions