[PATCH] D39108: [DAGCombine] Don't combine sext with extload if sextload is not supported and extload has multi users
Guozhi Wei via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 27 14:55:00 PDT 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL316802: [DAGCombine] Don't combine sext with extload if sextload is not supported and… (authored by Carrot).
Changed prior to commit:
https://reviews.llvm.org/D39108?vs=120662&id=120706#toc
Repository:
rL LLVM
https://reviews.llvm.org/D39108
Files:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/trunk/test/CodeGen/PowerPC/selectiondag-sextload.ll
Index: llvm/trunk/test/CodeGen/PowerPC/selectiondag-sextload.ll
===================================================================
--- llvm/trunk/test/CodeGen/PowerPC/selectiondag-sextload.ll
+++ llvm/trunk/test/CodeGen/PowerPC/selectiondag-sextload.ll
@@ -0,0 +1,26 @@
+; RUN: llc --mtriple=powerpc64le-linux-gnu < %s | FileCheck %s
+
+; It tests in function DAGCombiner::visitSIGN_EXTEND_INREG
+; signext will not be combined with extload, and causes extra zext.
+
+declare void @g(i32 signext)
+
+define void @foo(i8* %p) {
+entry:
+ br label %while.body
+
+while.body:
+ %0 = load i8, i8* %p, align 1
+ %conv = zext i8 %0 to i32
+ %cmp = icmp sgt i8 %0, 0
+ br i1 %cmp, label %if.then, label %while.body
+; CHECK: lbz
+; CHECK: extsb.
+; CHECK-NOT: rlwinm
+; CHECK: ble
+
+if.then:
+ tail call void @g(i32 signext %conv)
+ br label %while.body
+}
+
Index: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -8274,10 +8274,14 @@
}
// fold (sext_inreg (extload x)) -> (sextload x)
+ // If sextload is not supported by target, we can only do the combine when
+ // load has one use. Doing otherwise can block folding the extload with other
+ // extends that the target does support.
if (ISD::isEXTLoad(N0.getNode()) &&
ISD::isUNINDEXEDLoad(N0.getNode()) &&
EVT == cast<LoadSDNode>(N0)->getMemoryVT() &&
- ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile()) ||
+ ((!LegalOperations && !cast<LoadSDNode>(N0)->isVolatile() &&
+ N0.hasOneUse()) ||
TLI.isLoadExtLegal(ISD::SEXTLOAD, VT, EVT))) {
LoadSDNode *LN0 = cast<LoadSDNode>(N0);
SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(N), VT,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D39108.120706.patch
Type: text/x-patch
Size: 1867 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171027/2085fe0c/attachment.bin>
More information about the llvm-commits
mailing list