iucar / rpms / root

Forked from rpms/root 3 years ago
Clone
88f740b
diff -ur root-6.14.00.orig/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp root-6.14.00/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp
88f740b
--- root-6.14.00.orig/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp	2018-06-13 12:10:40.000000000 +0200
88f740b
+++ root-6.14.00/interpreter/llvm/src/lib/Target/PowerPC/PPCISelLowering.cpp	2018-06-27 17:06:55.739506085 +0200
88f740b
@@ -11861,6 +11861,11 @@
88f740b
          N->getOperand(1).getValueType() == MVT::i16 ||
88f740b
          (Subtarget.hasLDBRX() && Subtarget.isPPC64() &&
88f740b
           N->getOperand(1).getValueType() == MVT::i64))) {
88f740b
+      // STBRX can only handle simple types.
88f740b
+      EVT mVT = cast<StoreSDNode>(N)->getMemoryVT();
88f740b
+      if (mVT.isExtended())
88f740b
+        break;
88f740b
+
88f740b
       SDValue BSwapOp = N->getOperand(1).getOperand(0);
88f740b
       // Do an any-extend to 32-bits if this is a half-word input.
88f740b
       if (BSwapOp.getValueType() == MVT::i16)
88f740b
@@ -11868,7 +11873,6 @@
88f740b
 
88f740b
       // If the type of BSWAP operand is wider than stored memory width
88f740b
       // it need to be shifted to the right side before STBRX.
88f740b
-      EVT mVT = cast<StoreSDNode>(N)->getMemoryVT();
88f740b
       if (Op1VT.bitsGT(mVT)) {
88f740b
         int Shift = Op1VT.getSizeInBits() - mVT.getSizeInBits();
88f740b
         BSwapOp = DAG.getNode(ISD::SRL, dl, Op1VT, BSwapOp,
88f740b
Endast i root-6.14.00/interpreter/llvm/src: test