[llvm] r226805 - Fixed a bug in narrowing store operation.
Elena Demikhovsky
elena.demikhovsky at intel.com
Thu Jan 22 01:39:09 PST 2015
Author: delena
Date: Thu Jan 22 03:39:08 2015
New Revision: 226805
URL: http://llvm.org/viewvc/llvm-project?rev=226805&view=rev
Log:
Fixed a bug in narrowing store operation.
Type MVT::i1 became legal in KNL, but store operation can't be narrowed to this type,
since the size of VT (1 bit) is not equal to its actual store size(8 bits).
Added a test provided by David (dag at cray.com)
Added:
llvm/trunk/test/CodeGen/X86/i1narrowfail.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=226805&r1=226804&r2=226805&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Jan 22 03:39:08 2015
@@ -9497,9 +9497,12 @@ SDValue DAGCombiner::ReduceLoadOpStoreWi
unsigned MSB = BitWidth - Imm.countLeadingZeros() - 1;
unsigned NewBW = NextPowerOf2(MSB - ShAmt);
EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
+ // The narowwing should be profitable, the load/store operation should be
+ // legal (or custom) and the store size should be equal to the NewVT width.
while (NewBW < BitWidth &&
- !(TLI.isOperationLegalOrCustom(Opc, NewVT) &&
- TLI.isNarrowingProfitable(VT, NewVT))) {
+ (NewVT.getStoreSizeInBits() != NewBW ||
+ !TLI.isOperationLegalOrCustom(Opc, NewVT) ||
+ !TLI.isNarrowingProfitable(VT, NewVT))) {
NewBW = NextPowerOf2(NewBW);
NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
}
Added: llvm/trunk/test/CodeGen/X86/i1narrowfail.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/i1narrowfail.ll?rev=226805&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/i1narrowfail.ll (added)
+++ llvm/trunk/test/CodeGen/X86/i1narrowfail.ll Thu Jan 22 03:39:08 2015
@@ -0,0 +1,10 @@
+; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
+
+; CHECK-LABEL: @foo
+; CHECK: orb $16
+define void @foo(i64* %ptr) {
+ %r11 = load i64* %ptr, align 8
+ %r12 = or i64 16, %r11
+ store i64 %r12, i64* %ptr, align 8
+ ret void
+}
More information about the llvm-commits
mailing list