[llvm-branch-commits] [llvm-branch] r286246 - Merging r283129:

2016-11-08 Thread Hans Wennborg via llvm-branch-commits
Author: hans
Date: Tue Nov  8 10:38:34 2016
New Revision: 286246

URL: http://llvm.org/viewvc/llvm-project?rev=286246&view=rev
Log:
Merging r283129:

r283129 | hans | 2016-10-03 11:18:04 -0700 (Mon, 03 Oct 2016) | 6 lines

Jump threading: avoid trying to split edge into landingpad block (PR27840)

Splitting the edge is nontrivial because of the landing pad, and we would
currently assert trying to do it.

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


Added:
llvm/branches/release_39/test/Transforms/JumpThreading/pr27840.ll
  - copied unchanged from r283129, 
llvm/trunk/test/Transforms/JumpThreading/pr27840.ll
Modified:
llvm/branches/release_39/   (props changed)
llvm/branches/release_39/lib/Transforms/Scalar/JumpThreading.cpp

Propchange: llvm/branches/release_39/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 10:38:34 2016
@@ -1,3 +1,3 @@
 /llvm/branches/Apple/Pertwee:110850,110961
 /llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,23,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647,280837,281957
+/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,23,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647,280837,281957,283129

Modified: llvm/branches/release_39/lib/Transforms/Scalar/JumpThreading.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/lib/Transforms/Scalar/JumpThreading.cpp?rev=286246&r1=286245&r2=286246&view=diff
==
--- llvm/branches/release_39/lib/Transforms/Scalar/JumpThreading.cpp (original)
+++ llvm/branches/release_39/lib/Transforms/Scalar/JumpThreading.cpp Tue Nov  8 
10:38:34 2016
@@ -1322,6 +1322,10 @@ bool JumpThreadingPass::ProcessBranchOnX
   if (!isa(BB->front()))
 return false;
 
+  // If this BB is a landing pad, we won't be able to split the edge into it.
+  if (BB->isEHPad())
+return false;
+
   // If we have a xor as the branch input to this block, and we know that the
   // LHS or RHS of the xor in any predecessor is true/false, then we can clone
   // the condition into the predecessor and fix that value to true, saving some


___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm-branch] r286248 - [3.9.1] Merging r282613 - [X86][AVX] Add test showing that VBROADCAST loads don't correctly respect dependencies

2016-11-08 Thread Simon Pilgrim via llvm-branch-commits
Author: rksimon
Date: Tue Nov  8 10:45:26 2016
New Revision: 286248

URL: http://llvm.org/viewvc/llvm-project?rev=286248&view=rev
Log:
[3.9.1] Merging r282613 - [X86][AVX] Add test showing that VBROADCAST loads 
don't correctly respect dependencies

As discussed in PR30596, this is a preliminary test update before we can merge 
r283070

Note: This required the test to be regenerated after the merge as 3.9.1 doesn't 
have trunk's latest lea -> mov simplifications

Modified:
llvm/branches/release_39/   (props changed)
llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll

Propchange: llvm/branches/release_39/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 10:45:26 2016
@@ -1,3 +1,3 @@
 /llvm/branches/Apple/Pertwee:110850,110961
 /llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,23,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647,280837,281957,283129
+/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,23,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647,280837,281957,282613,283129

Modified: llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll?rev=286248&r1=286247&r2=286248&view=diff
==
--- llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll (original)
+++ llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll Tue Nov  8 
10:45:26 2016
@@ -546,3 +546,62 @@ define <4 x double> @splat_concat4(doubl
   %6 = shufflevector <2 x double> %3, <2 x double> %5, <4 x i32> 
   ret <4 x double> %6
 }
+
+;
+; FIXME: When VBROADCAST replaces an existing load, ensure it still respects 
lifetime dependencies.
+;
+define float @broadcast_lifetime() nounwind {
+; X32-LABEL: broadcast_lifetime:
+; X32:   ## BB#0:
+; X32-NEXT:pushl %esi
+; X32-NEXT:subl $40, %esp
+; X32-NEXT:leal {{[0-9]+}}(%esp), %esi
+; X32-NEXT:movl %esi, (%esp)
+; X32-NEXT:calll _gfunc
+; X32-NEXT:movl %esi, (%esp)
+; X32-NEXT:calll _gfunc
+; X32-NEXT:vbroadcastss {{[0-9]+}}(%esp), %xmm0
+; X32-NEXT:vbroadcastss {{[0-9]+}}(%esp), %xmm1
+; X32-NEXT:vsubss %xmm0, %xmm1, %xmm0
+; X32-NEXT:vmovss %xmm0, {{[0-9]+}}(%esp)
+; X32-NEXT:flds {{[0-9]+}}(%esp)
+; X32-NEXT:addl $40, %esp
+; X32-NEXT:popl %esi
+; X32-NEXT:retl
+;
+; X64-LABEL: broadcast_lifetime:
+; X64:   ## BB#0:
+; X64-NEXT:subq $24, %rsp
+; X64-NEXT:leaq (%rsp), %rdi
+; X64-NEXT:callq _gfunc
+; X64-NEXT:leaq (%rsp), %rdi
+; X64-NEXT:callq _gfunc
+; X64-NEXT:vbroadcastss {{[0-9]+}}(%rsp), %xmm0
+; X64-NEXT:vbroadcastss {{[0-9]+}}(%rsp), %xmm1
+; X64-NEXT:vsubss %xmm0, %xmm1, %xmm0
+; X64-NEXT:addq $24, %rsp
+; X64-NEXT:retq
+  %1 = alloca <4 x float>, align 16
+  %2 = alloca <4 x float>, align 16
+  %3 = bitcast <4 x float>* %1 to i8*
+  %4 = bitcast <4 x float>* %2 to i8*
+
+  call void @llvm.lifetime.start(i64 16, i8* %3)
+  call void @gfunc(<4 x float>* %1)
+  %5 = load <4 x float>, <4 x float>* %1, align 16
+  call void @llvm.lifetime.end(i64 16, i8* %3)
+
+  call void @llvm.lifetime.start(i64 16, i8* %4)
+  call void @gfunc(<4 x float>* %2)
+  %6 = load <4 x float>, <4 x float>* %2, align 16
+  call void @llvm.lifetime.end(i64 16, i8* %4)
+
+  %7 = extractelement <4 x float> %5, i32 1
+  %8 = extractelement <4 x float> %6, i32 1
+  %9 = fsub float %8, %7
+  ret float %9
+}
+
+declare void @gfunc(<4 x float>*)
+declare void @llvm.lifetime.start(i64, i8*)
+declare void @llvm.lifetime.end(i64, i8*)


___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm-branch] r286251 - [3.9.1] Merging r283070 - [X86][AVX] Ensure broadcast loads respect dependencies

2016-11-08 Thread Simon Pilgrim via llvm-branch-commits
Author: rksimon
Date: Tue Nov  8 11:01:05 2016
New Revision: 286251

URL: http://llvm.org/viewvc/llvm-project?rev=286251&view=rev
Log:
[3.9.1] Merging r283070 - [X86][AVX] Ensure broadcast loads respect dependencies

To allow broadcast loads of a non-zero'th vector element, 
lowerVectorShuffleAsBroadcast can replace a load with a new load with an 
adjusted address, but unfortunately we weren't ensuring that the new load 
respected the same dependencies.

This patch adds a TokenFactor and updates all dependencies of the old load to 
reference the new load instead.

Bug found during internal testing.

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

As discussed on PR30596

Modified:
llvm/branches/release_39/   (props changed)
llvm/branches/release_39/lib/Target/X86/X86ISelLowering.cpp
llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll

Propchange: llvm/branches/release_39/
--
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  8 11:01:05 2016
@@ -1,3 +1,3 @@
 /llvm/branches/Apple/Pertwee:110850,110961
 /llvm/branches/type-system-rewrite:133420-134817
-/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,23,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647,280837,281957,282613,283129
+/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,23,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647,280837,281957,282613,283070,283129

Modified: llvm/branches/release_39/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/lib/Target/X86/X86ISelLowering.cpp?rev=286251&r1=286250&r2=286251&view=diff
==
--- llvm/branches/release_39/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/branches/release_39/lib/Target/X86/X86ISelLowering.cpp Tue Nov  8 
11:01:05 2016
@@ -8656,6 +8656,17 @@ static SDValue lowerVectorShuffleAsBroad
 V = DAG.getLoad(SVT, DL, Ld->getChain(), NewAddr,
 DAG.getMachineFunction().getMachineMemOperand(
 Ld->getMemOperand(), Offset, SVT.getStoreSize()));
+
+// Make sure the newly-created LOAD is in the same position as Ld in
+// terms of dependency. We create a TokenFactor for Ld and V,
+// and update uses of Ld's output chain to use the TokenFactor.
+if (Ld->hasAnyUseOfValue(1)) {
+  SDValue NewChain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other,
+ SDValue(Ld, 1), SDValue(V.getNode(), 1));
+  DAG.ReplaceAllUsesOfValueWith(SDValue(Ld, 1), NewChain);
+  DAG.UpdateNodeOperands(NewChain.getNode(), SDValue(Ld, 1),
+ SDValue(V.getNode(), 1));
+}
   } else if (!BroadcastFromReg) {
 // We can't broadcast from a vector register.
 return SDValue();

Modified: llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll
URL: 
http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll?rev=286251&r1=286250&r2=286251&view=diff
==
--- llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll (original)
+++ llvm/branches/release_39/test/CodeGen/X86/avx-vbroadcast.ll Tue Nov  8 
11:01:05 2016
@@ -548,38 +548,40 @@ define <4 x double> @splat_concat4(doubl
 }
 
 ;
-; FIXME: When VBROADCAST replaces an existing load, ensure it still respects 
lifetime dependencies.
+; When VBROADCAST replaces an existing load, ensure it still respects lifetime 
dependencies.
 ;
 define float @broadcast_lifetime() nounwind {
 ; X32-LABEL: broadcast_lifetime:
 ; X32:   ## BB#0:
 ; X32-NEXT:pushl %esi
-; X32-NEXT:subl $40, %esp
+; X32-NEXT:subl $56, %esp
 ; X32-NEXT:leal {{[0-9]+}}(%esp), %esi
 ; X32-NEXT:movl %esi, (%esp)
 ; X32-NEXT:calll _gfunc
+; X32-NEXT:vbroadcastss {{[0-9]+}}(%esp), %xmm0
+; X32-NEXT:vmovaps %xmm0, {{[0-9]+}}(%esp) ## 16-byte Spill
 ; X32-NEXT:movl %esi, (%esp)
 ; X32-NEXT:calll _gfunc
 ; X32-NEXT:vbroadcastss {{[0-9]+}}(%esp), %xmm0
-; X32-NEXT:vbroadcastss {{[0-9]+}}(%esp), %xmm1
-; X32-NEXT:vsubss %xmm0, %xmm1, %xmm0
+;