Skip to content

Commit

Permalink
[legalize-types] Remove stale entries from SoftenedFloats.
Browse files Browse the repository at this point in the history
Summary:
When replacing a SDValue, we should remove the replaced value from
SoftenedFloats (and possibly the other maps as well?).

When we revisit a Node because it needs analyzing again, we have to
remove all result values from SoftenedFloats (and possibly other maps?).

This fixes the fp128 test failures with expensive checks for X86.

I think we probably should also remove the values from the other maps
(PromotedIntegers and so on), let me know what you think.

Reviewers: baldrick, bogner, davidxl, ab, arsenm, pirama, chh, RKSimon

Reviewed By: chh

Subscribers: danalbert, wdng, srhines, hfinkel, sepavloff, llvm-commits

Differential Revision: https://reviews.llvm.org/D29265

llvm-svn: 296964
  • Loading branch information
fhahn committed Mar 4, 2017
1 parent d1471f1 commit 6406f98
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 13 deletions.
8 changes: 8 additions & 0 deletions llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
Expand Up @@ -330,6 +330,12 @@ bool DAGTypeLegalizer::run() {
// to the worklist etc.
if (NeedsReanalyzing) {
assert(N->getNodeId() == ReadyToProcess && "Node ID recalculated?");

// Remove any result values from SoftenedFloats as N will be revisited
// again.
for (unsigned i = 0, NumResults = N->getNumValues(); i < NumResults; ++i)
SoftenedFloats.erase(SDValue(N, i));

N->setNodeId(NewNode);
// Recompute the NodeId and correct processed operands, adding the node to
// the worklist if ready.
Expand Down Expand Up @@ -748,6 +754,8 @@ void DAGTypeLegalizer::ReplaceValueWith(SDValue From, SDValue To) {
// new uses of From due to CSE. If this happens, replace the new uses of
// From with To.
} while (!From.use_empty());

SoftenedFloats.erase(From);
}

void DAGTypeLegalizer::SetPromotedInteger(SDValue Op, SDValue Result) {
Expand Down
6 changes: 4 additions & 2 deletions llvm/test/CodeGen/X86/fp128-compare.ll
@@ -1,5 +1,7 @@
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s

define i32 @TestComp128GT(fp128 %d1, fp128 %d2) {
entry:
Expand Down
3 changes: 2 additions & 1 deletion llvm/test/CodeGen/X86/fp128-g.ll
@@ -1,4 +1,5 @@
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s --check-prefix=X64
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s --check-prefix=X64
;
; These cases check if x86_64-linux-android works with -O2 -g,
; especially CSE matching needed by SoftenFloatRes_LOAD.
Expand Down
6 changes: 4 additions & 2 deletions llvm/test/CodeGen/X86/fp128-i128.ll
@@ -1,5 +1,7 @@
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s

; These tests were generated from simplified libm C code.
; When compiled for the x86_64-linux-android target,
Expand Down
6 changes: 4 additions & 2 deletions llvm/test/CodeGen/X86/fp128-libcalls.ll
@@ -1,5 +1,7 @@
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s

; Check all soft floating point library function calls.

Expand Down
6 changes: 4 additions & 2 deletions llvm/test/CodeGen/X86/fp128-load.ll
@@ -1,5 +1,7 @@
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s

; __float128 myFP128 = 1.0L; // x86_64-linux-android
@my_fp128 = global fp128 0xL00000000000000003FFF000000000000, align 16
Expand Down
12 changes: 8 additions & 4 deletions llvm/test/CodeGen/X86/fp128-select.ll
@@ -1,8 +1,12 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx | FileCheck %s --check-prefix=MMX
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx | FileCheck %s --check-prefix=MMX
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s --check-prefix=MMX
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu -mattr=+mmx \
; RUN: -enable-legalize-types-checking | FileCheck %s --check-prefix=MMX
; RUN: llc < %s -O2 -mtriple=x86_64-linux-android \
; RUN: -enable-legalize-types-checking | FileCheck %s
; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu \
; RUN: -enable-legalize-types-checking | FileCheck %s

define void @test_select(fp128* %p, fp128* %q, i1 zeroext %c) {
; MMX-LABEL: test_select:
Expand Down

0 comments on commit 6406f98

Please sign in to comment.