mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-20 09:30:43 +00:00
third time around: instead of disabling this completely,
only disable it if we don't know it will be obviously profitable. Still fixme, but less so. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44658 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e00cbad78d
commit
d3fd6d2b25
@ -2134,12 +2134,6 @@ SDOperand DAGCombiner::visitXOR(SDNode *N) {
|
||||
/// visitShiftByConstant - Handle transforms common to the three shifts, when
|
||||
/// the shift amount is a constant.
|
||||
SDOperand DAGCombiner::visitShiftByConstant(SDNode *N, unsigned Amt) {
|
||||
// FIXME: disable this for now. This pessimizes some common cases like:
|
||||
//
|
||||
//void foo(int *X, int i) { X[i & 1235] = 1; }
|
||||
//int bar(int *X, int i) { return X[i & 255]; }
|
||||
return SDOperand();
|
||||
|
||||
SDNode *LHS = N->getOperand(0).Val;
|
||||
if (!LHS->hasOneUse()) return SDOperand();
|
||||
|
||||
@ -2169,6 +2163,19 @@ SDOperand DAGCombiner::visitShiftByConstant(SDNode *N, unsigned Amt) {
|
||||
ConstantSDNode *BinOpCst = dyn_cast<ConstantSDNode>(LHS->getOperand(1));
|
||||
if (!BinOpCst) return SDOperand();
|
||||
|
||||
|
||||
// FIXME: disable this for unless the input to the binop is a shift by a
|
||||
// constant. If it is not a shift, it pessimizes some common cases like:
|
||||
//
|
||||
//void foo(int *X, int i) { X[i & 1235] = 1; }
|
||||
//int bar(int *X, int i) { return X[i & 255]; }
|
||||
SDNode *BinOpLHSVal = LHS->getOperand(0).Val;
|
||||
if ((BinOpLHSVal->getOpcode() != ISD::SHL &&
|
||||
BinOpLHSVal->getOpcode() != ISD::SRA &&
|
||||
BinOpLHSVal->getOpcode() != ISD::SRL) ||
|
||||
!isa<ConstantSDNode>(BinOpLHSVal->getOperand(1)))
|
||||
return SDOperand();
|
||||
|
||||
MVT::ValueType VT = N->getValueType(0);
|
||||
|
||||
// If this is a signed shift right, and the high bit is modified
|
||||
|
@ -1,5 +1,4 @@
|
||||
; RUN: llvm-as < %s | llc | not grep shrl
|
||||
; XFAIL: *
|
||||
|
||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
|
||||
target triple = "i686-apple-darwin8"
|
||||
|
Loading…
Reference in New Issue
Block a user