[llvm-branch-commits] [llvm] be653f6 - [X86] combineX86ShuffleChain - don't fold to truncate(concat(V1, V2)) if it was already a PACK op

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Simon Pilgrim
Date: 2022-05-18T16:34:09-07:00
New Revision: be653f6292e76b82d3532e6fba0e15ce633bd80a

URL: 
https://github.com/llvm/llvm-project/commit/be653f6292e76b82d3532e6fba0e15ce633bd80a
DIFF: 
https://github.com/llvm/llvm-project/commit/be653f6292e76b82d3532e6fba0e15ce633bd80a.diff

LOG: [X86] combineX86ShuffleChain - don't fold to truncate(concat(V1,V2)) if it 
was already a PACK op

Fixes #55050

(cherry picked from commit e8305c0b8f492272446d517e67d451f390d35dbe)

Added: 


Modified: 
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bwvl.ll

Removed: 




diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp 
b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 682932b8f3e66..8bb7e81e19bbd 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -37558,7 +37558,11 @@ static SDValue 
combineX86ShuffleChain(ArrayRef Inputs, SDValue Root,
  (RootVT.is128BitVector() && Subtarget.hasVLX())) &&
 (MaskEltSizeInBits > 8 || Subtarget.hasBWI()) &&
 isSequentialOrUndefInRange(Mask, 0, NumMaskElts, 0, 2)) {
-  if (Depth == 0 && Root.getOpcode() == ISD::TRUNCATE)
+  // Bail if this was already a truncation or PACK node.
+  // We sometimes fail to match PACK if we demand known undef elements.
+  if (Depth == 0 && (Root.getOpcode() == ISD::TRUNCATE ||
+ Root.getOpcode() == X86ISD::PACKSS ||
+ Root.getOpcode() == X86ISD::PACKUS))
 return SDValue(); // Nothing to do!
   ShuffleSrcVT = MVT::getIntegerVT(MaskEltSizeInBits * 2);
   ShuffleSrcVT = MVT::getVectorVT(ShuffleSrcVT, NumMaskElts / 2);

diff  --git a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bwvl.ll 
b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bwvl.ll
index be65effbc7241..3be4e6777d6fe 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bwvl.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512bwvl.ll
@@ -174,3 +174,47 @@ define <8 x i32> @PR46393(<8 x i16> %a0, i8 %a1) {
   %sel = select <8 x i1> %mask, <8 x i32> %shl, <8 x i32> zeroinitializer
   ret <8 x i32> %sel
 }
+
+define i64 @PR55050() {
+; X86-LABEL: PR55050:
+; X86:   # %bb.0: # %entry
+; X86-NEXT:xorl %eax, %eax
+; X86-NEXT:testb %al, %al
+; X86-NEXT:jne .LBB10_2
+; X86-NEXT:  # %bb.1: # %if
+; X86-NEXT:xorl %eax, %eax
+; X86-NEXT:  .LBB10_2: # %exit
+; X86-NEXT:movl %eax, %edx
+; X86-NEXT:retl
+;
+; X64-LABEL: PR55050:
+; X64:   # %bb.0: # %entry
+; X64-NEXT:xorl %eax, %eax
+; X64-NEXT:testb %al, %al
+; X64-NEXT:xorl %eax, %eax
+; X64-NEXT:retq
+entry:
+  %i275 = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> undef, <16 x i8> 
zeroinitializer)
+  %i277 = call <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8> undef, <16 x i8> 
zeroinitializer)
+  br i1 undef, label %exit, label %if
+
+if:
+  %i298 = bitcast <2 x i64> %i275 to <4 x i32>
+  %i299 = bitcast <2 x i64> %i277 to <4 x i32>
+  %i300 = shufflevector <4 x i32> %i298, <4 x i32> %i299, <4 x i32> 
+  %i339 = call <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32> %i300, <4 x i32> 
undef)
+  %i354 = shufflevector <8 x i16> %i339, <8 x i16> undef, <8 x i32> 
+  %i356 = call <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16> %i354, <8 x 
i16> undef)
+  %i357 = shufflevector <16 x i8> %i356, <16 x i8> zeroinitializer, <16 x i32> 

+  %i361 = extractelement <16 x i8> %i357, i64 8
+  %i360 = and i8 %i361, 63
+  %i379 = zext i8 %i360 to i64
+  br label %exit
+
+exit:
+  %res = phi i64 [ %i379, %if ], [ 0, %entry ]
+  ret i64 %res
+}
+declare <2 x i64> @llvm.x86.sse2.psad.bw(<16 x i8>, <16 x i8>)
+declare <16 x i8> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>)
+declare <8 x i16> @llvm.x86.sse41.packusdw(<4 x i32>, <4 x i32>)



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


[llvm-branch-commits] [llvm] c564157 - [SystemZ] Bugfix in SystemZTargetLowering::combineINT_TO_FP()

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Jonas Paulsson
Date: 2022-05-18T16:34:51-07:00
New Revision: c56415735060cc71e58a12e9518569a0b3f7d6b2

URL: 
https://github.com/llvm/llvm-project/commit/c56415735060cc71e58a12e9518569a0b3f7d6b2
DIFF: 
https://github.com/llvm/llvm-project/commit/c56415735060cc71e58a12e9518569a0b3f7d6b2.diff

LOG: [SystemZ] Bugfix in SystemZTargetLowering::combineINT_TO_FP()

Make sure to also handle extended value types to avoid crashing.

Resulting integers greater than 64 bits are not optimized (i128 is not a
legal type), and vectorizing seems to result in libcalls instead of just
scalarization.

Other extended vector types like <10 x float> are however now handled and
should result in vectorized conversions.

Reviewed By: Ulrich Weigand

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

(cherry picked from commit 4273e616e573f4854e9c659c2e6d8a31f3e3c595)

Added: 


Modified: 
llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
llvm/test/CodeGen/SystemZ/vec-move-23.ll

Removed: 




diff  --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp 
b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
index f10651d5c5d7e..d795697b3ed68 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -6442,22 +6442,26 @@ SDValue SystemZTargetLowering::combineINT_TO_FP(
 SDNode *N, DAGCombinerInfo &DCI) const {
   if (DCI.Level != BeforeLegalizeTypes)
 return SDValue();
+  SelectionDAG &DAG = DCI.DAG;
+  LLVMContext &Ctx = *DAG.getContext();
   unsigned Opcode = N->getOpcode();
   EVT OutVT = N->getValueType(0);
-  SelectionDAG &DAG = DCI.DAG;
+  Type *OutLLVMTy = OutVT.getTypeForEVT(Ctx);
   SDValue Op = N->getOperand(0);
-  unsigned OutScalarBits = OutVT.getScalarSizeInBits();
+  unsigned OutScalarBits = OutLLVMTy->getScalarSizeInBits();
   unsigned InScalarBits = Op->getValueType(0).getScalarSizeInBits();
 
   // Insert an extension before type-legalization to avoid scalarization, e.g.:
   // v2f64 = uint_to_fp v2i16
   // =>
   // v2f64 = uint_to_fp (v2i64 zero_extend v2i16)
-  if (OutVT.isVector() && OutScalarBits > InScalarBits) {
-MVT ExtVT = 
MVT::getVectorVT(MVT::getIntegerVT(OutVT.getScalarSizeInBits()),
- OutVT.getVectorNumElements());
+  if (OutLLVMTy->isVectorTy() && OutScalarBits > InScalarBits &&
+  OutScalarBits <= 64) {
+unsigned NumElts = cast(OutLLVMTy)->getNumElements();
+EVT ExtVT = EVT::getVectorVT(
+Ctx, EVT::getIntegerVT(Ctx, OutLLVMTy->getScalarSizeInBits()), 
NumElts);
 unsigned ExtOpcode =
-  (Opcode == ISD::UINT_TO_FP ? ISD::ZERO_EXTEND : ISD::SIGN_EXTEND);
+(Opcode == ISD::UINT_TO_FP ? ISD::ZERO_EXTEND : ISD::SIGN_EXTEND);
 SDValue ExtOp = DAG.getNode(ExtOpcode, SDLoc(N), ExtVT, Op);
 return DAG.getNode(Opcode, SDLoc(N), OutVT, ExtOp);
   }

diff  --git a/llvm/test/CodeGen/SystemZ/vec-move-23.ll 
b/llvm/test/CodeGen/SystemZ/vec-move-23.ll
index 1e31c0b606ee0..05f50cc2a066b 100644
--- a/llvm/test/CodeGen/SystemZ/vec-move-23.ll
+++ b/llvm/test/CodeGen/SystemZ/vec-move-23.ll
@@ -130,3 +130,36 @@ define void @fun7(<4 x i16> %Src, <4 x float>* %Dst) {
   ret void
 }
 
+; Test that this does not crash but results in scalarized conversions.
+define void @fun8(<2 x i64> %dwords, <2 x fp128> *%ptr) {
+; CHECK-LABEL: fun8
+; CHECK: vlgvg
+; CHECK: cxlgbr
+ %conv = uitofp <2 x i64> %dwords to <2 x fp128>
+ store <2 x fp128> %conv, <2 x fp128> *%ptr
+ ret void
+}
+
+; Test that this results in vectorized conversions.
+define void @fun9(<10 x i16> *%Src, <10 x float> *%ptr) {
+; CHECK-LABEL: fun9
+; Z15: larl%r1, .LCPI9_0
+; Z15-NEXT: vl %v0, 16(%r2), 4
+; Z15-NEXT: vl %v1, 0(%r2), 4
+; Z15-NEXT: vl %v2, 0(%r1), 3
+; Z15-NEXT: vperm  %v2, %v2, %v1, %v2
+; Z15-NEXT: vuplhh %v1, %v1
+; Z15-NEXT: vuplhh %v0, %v0
+; Z15-NEXT: vcelfb %v2, %v2, 0, 0
+; Z15-NEXT: vcelfb %v1, %v1, 0, 0
+; Z15-NEXT: vcelfb %v0, %v0, 0, 0
+; Z15-NEXT: vsteg  %v0, 32(%r3), 0
+; Z15-NEXT: vst%v2, 16(%r3), 4
+; Z15-NEXT: vst%v1, 0(%r3), 4
+; Z15-NEXT: br %r14
+
+ %Val = load <10 x i16>, <10 x i16> *%Src
+ %conv = uitofp <10 x i16> %Val to <10 x float>
+ store <10 x float> %conv, <10 x float> *%ptr
+ ret void
+}



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


[llvm-branch-commits] [llvm] 087082a - [cmake] Increase -fms-compatibility-version in Windows toolchain file

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Shoaib Meenai
Date: 2022-05-18T19:54:03-07:00
New Revision: 087082a828ffc833ec5b54caadd5ba86af811dae

URL: 
https://github.com/llvm/llvm-project/commit/087082a828ffc833ec5b54caadd5ba86af811dae
DIFF: 
https://github.com/llvm/llvm-project/commit/087082a828ffc833ec5b54caadd5ba86af811dae.diff

LOG: [cmake] Increase -fms-compatibility-version in Windows toolchain file

Make it match LLVM's new minimum requirement (after 
https://reviews.llvm.org/D114639).

(cherry picked from commit 4db89e23190d1d1590d88df08056d327e651c94c)

Added: 


Modified: 
llvm/cmake/platforms/WinMsvc.cmake

Removed: 




diff  --git a/llvm/cmake/platforms/WinMsvc.cmake 
b/llvm/cmake/platforms/WinMsvc.cmake
index d30701a318584..ebb4da419e46a 100644
--- a/llvm/cmake/platforms/WinMsvc.cmake
+++ b/llvm/cmake/platforms/WinMsvc.cmake
@@ -259,7 +259,7 @@ set(CROSS_TOOLCHAIN_FLAGS_NATIVE "${_CTF_NATIVE_DEFAULT}" 
CACHE STRING "")
 set(COMPILE_FLAGS
 -D_CRT_SECURE_NO_WARNINGS
 --target=${TRIPLE_ARCH}-windows-msvc
--fms-compatibility-version=19.14
+-fms-compatibility-version=19.20
 -imsvc "${ATLMFC_INCLUDE}"
 -imsvc "${MSVC_INCLUDE}"
 -imsvc "${WINSDK_INCLUDE}/ucrt"



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


[llvm-branch-commits] [clang] 9827a18 - [Driver][Ananas] -r: imply -nostdlib like GCC

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Brad Smith
Date: 2022-05-18T19:56:45-07:00
New Revision: 9827a185b611b33b7735458e024eab7a0646bc40

URL: 
https://github.com/llvm/llvm-project/commit/9827a185b611b33b7735458e024eab7a0646bc40
DIFF: 
https://github.com/llvm/llvm-project/commit/9827a185b611b33b7735458e024eab7a0646bc40.diff

LOG: [Driver][Ananas] -r: imply -nostdlib like GCC

Similar to D116843 for Gnu.cpp

Reviewed By: zhmu, MaskRay

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

(cherry picked from commit a132e527f25164268e08ebc63b043bbce8a043ed)

Added: 


Modified: 
clang/lib/Driver/ToolChains/Ananas.cpp
clang/test/Driver/ananas.c

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/Ananas.cpp 
b/clang/lib/Driver/ToolChains/Ananas.cpp
index be1476a7636c6..40f9e56b38e94 100644
--- a/clang/lib/Driver/ToolChains/Ananas.cpp
+++ b/clang/lib/Driver/ToolChains/Ananas.cpp
@@ -85,7 +85,8 @@ void ananas::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
 assert(Output.isNothing() && "Invalid output.");
   }
 
-  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
+   options::OPT_r)) {
 if (!Args.hasArg(options::OPT_shared)) {
   CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
 }
@@ -111,12 +112,15 @@ void ananas::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
 
   AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
 
-  if (ToolChain.ShouldLinkCXXStdlib(Args))
-ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);
-  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs))
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
+   options::OPT_r)) {
+if (ToolChain.ShouldLinkCXXStdlib(Args))
+  ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);
 CmdArgs.push_back("-lc");
+  }
 
-  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
+   options::OPT_r)) {
 if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
   
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));
 else

diff  --git a/clang/test/Driver/ananas.c b/clang/test/Driver/ananas.c
index 4edc2a10941c7..bd36fae6f424a 100644
--- a/clang/test/Driver/ananas.c
+++ b/clang/test/Driver/ananas.c
@@ -15,3 +15,10 @@
 // CHECK-SHARED: crtbeginS.o
 // CHECK-SHARED: crtendS.o
 // CHECK-SHARED: crtn.o
+
+// -r suppresses default -l and crt*.o like -nostdlib.
+// RUN: %clang %s -### -o %t.o --target=x86_64-unknown-ananas -r 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-RELOCATABLE
+// CHECK-RELOCATABLE: "-r"
+// CHECK-RELOCATABLE-NOT: "-l
+// CHECK-RELOCATABLE-NOT: {{.*}}crt{{[^.]+}}.o



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


[llvm-branch-commits] [clang] cda300e - [Driver][Solaris] -r: imply -nostdlib like GCC

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Brad Smith
Date: 2022-05-18T20:08:51-07:00
New Revision: cda300eab8ddb9fb90859014ec3721567fec727c

URL: 
https://github.com/llvm/llvm-project/commit/cda300eab8ddb9fb90859014ec3721567fec727c
DIFF: 
https://github.com/llvm/llvm-project/commit/cda300eab8ddb9fb90859014ec3721567fec727c.diff

LOG: [Driver][Solaris] -r: imply -nostdlib like GCC

Similar to D116843 for Gnu.cpp

Reviewed By: MaskRay

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

(cherry picked from commit 3d7da810e4a6e1ade2c0d649f17f8aa820248765)

Added: 


Modified: 
clang/lib/Driver/ToolChains/Solaris.cpp
clang/test/Driver/solaris-ld.c

Removed: 




diff  --git a/clang/lib/Driver/ToolChains/Solaris.cpp 
b/clang/lib/Driver/ToolChains/Solaris.cpp
index 24f18b92dd661..cb3898575d3ad 100644
--- a/clang/lib/Driver/ToolChains/Solaris.cpp
+++ b/clang/lib/Driver/ToolChains/Solaris.cpp
@@ -82,7 +82,8 @@ void solaris::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
 assert(Output.isNothing() && "Invalid output.");
   }
 
-  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
+   options::OPT_r)) {
 if (!Args.hasArg(options::OPT_shared))
   CmdArgs.push_back(
   Args.MakeArgString(getToolChain().GetFilePath("crt1.o")));
@@ -122,7 +123,8 @@ void solaris::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   bool NeedsSanitizerDeps = addSanitizerRuntimes(getToolChain(), Args, 
CmdArgs);
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
 
-  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
+   options::OPT_r)) {
 if (getToolChain().ShouldLinkCXXStdlib(Args))
   getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
 if (Args.hasArg(options::OPT_fstack_protector) ||
@@ -149,11 +151,13 @@ void solaris::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   linkSanitizerRuntimeDeps(getToolChain(), CmdArgs);
   }
 
-  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
+   options::OPT_r)) {
 CmdArgs.push_back(
 Args.MakeArgString(getToolChain().GetFilePath("crtend.o")));
+CmdArgs.push_back(
+Args.MakeArgString(getToolChain().GetFilePath("crtn.o")));
   }
-  CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o")));
 
   getToolChain().addProfileRTLibs(Args, CmdArgs);
 

diff  --git a/clang/test/Driver/solaris-ld.c b/clang/test/Driver/solaris-ld.c
index d40e5dac2da9e..57b2b1ba159b0 100644
--- a/clang/test/Driver/solaris-ld.c
+++ b/clang/test/Driver/solaris-ld.c
@@ -108,3 +108,13 @@
 // CHECK-SPARC32-SHARED-SAME: "-lc"
 // CHECK-SPARC32-SHARED-NOT: "-lgcc"
 // CHECK-SPARC32-SHARED-NOT: "-lm"
+
+// -r suppresses default -l and crt*.o, values-*.o like -nostdlib.
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o \
+// RUN: --target=sparc-sun-solaris2.11 -r 2>&1 \
+// RUN:   | FileCheck %s --check-prefix=CHECK-RELOCATABLE
+// CHECK-RELOCATABLE: "-L
+// CHECK-RELOCATABLE: "-r"
+// CHECK-RELOCATABLE-NOT: "-l
+// CHECK-RELOCATABLE-NOT: {{.*}}crt{{[^.]+}}.o
+// CHECK-RELOCATABLE-NOT: {{.*}}values-{{[^.]+}}.o



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


[llvm-branch-commits] [llvm] c65b0cd - [GlobalIsel] Fix fallback if stack protector isn't supported.

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Eli Friedman
Date: 2022-05-18T20:09:32-07:00
New Revision: c65b0cd2421d722d3f2b1eb78dd91d758db5049a

URL: 
https://github.com/llvm/llvm-project/commit/c65b0cd2421d722d3f2b1eb78dd91d758db5049a
DIFF: 
https://github.com/llvm/llvm-project/commit/c65b0cd2421d722d3f2b1eb78dd91d758db5049a.diff

LOG: [GlobalIsel] Fix fallback if stack protector isn't supported.

When GlobalISel fails, we need to report the error, and we need to set
the FailedISel property.  We skipped those steps if stack protector
insertion failed, which led to a very strange miscompile.

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

(cherry picked from commit 96c2a0c9fff24803be14bfaa579e4f230763d3cc)

Added: 
llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-stack-protector-windows.ll

Modified: 
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

Removed: 




diff  --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp 
b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index 6d415c9c7f90c..847df84afba6c 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -3469,8 +3469,13 @@ bool IRTranslator::runOnMachineFunction(MachineFunction 
&CurMF) {
 return false;
   }
 
-  if (!finalizeBasicBlock(*BB, MBB))
+  if (!finalizeBasicBlock(*BB, MBB)) {
+OptimizationRemarkMissed R("gisel-irtranslator", "GISelFailure",
+   BB->getTerminator()->getDebugLoc(), BB);
+R << "unable to translate basic block";
+reportTranslationError(*MF, *TPC, *ORE, R);
 return false;
+  }
 }
 #ifndef NDEBUG
 WrapperObserver.removeObserver(&Verifier);

diff  --git 
a/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-stack-protector-windows.ll 
b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-stack-protector-windows.ll
new file mode 100644
index 0..7ce80afb8c7f8
--- /dev/null
+++ 
b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-stack-protector-windows.ll
@@ -0,0 +1,38 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -verify-machineinstrs -mtriple=aarch64-pc-windows-msvc %s -o - 
-global-isel -global-isel-abort=0 | FileCheck %s
+
+; Make sure we correctly fall back to SelectionDAG isel for unsupported stack 
protectors.
+
+define void @caller() sspreq {
+; CHECK-LABEL: caller:
+; CHECK:   .seh_proc caller
+; CHECK-NEXT:  // %bb.0: // %entry
+; CHECK-NEXT:sub sp, sp, #32
+; CHECK-NEXT:.seh_stackalloc 32
+; CHECK-NEXT:str x30, [sp, #16] // 8-byte Folded Spill
+; CHECK-NEXT:.seh_save_reg x30, 16
+; CHECK-NEXT:.seh_endprologue
+; CHECK-NEXT:adrp x8, __security_cookie
+; CHECK-NEXT:add x0, sp, #4
+; CHECK-NEXT:ldr x8, [x8, :lo12:__security_cookie]
+; CHECK-NEXT:str x8, [sp, #8]
+; CHECK-NEXT:bl callee
+; CHECK-NEXT:ldr x0, [sp, #8]
+; CHECK-NEXT:bl __security_check_cookie
+; CHECK-NEXT:.seh_startepilogue
+; CHECK-NEXT:ldr x30, [sp, #16] // 8-byte Folded Reload
+; CHECK-NEXT:.seh_save_reg x30, 16
+; CHECK-NEXT:add sp, sp, #32
+; CHECK-NEXT:.seh_stackalloc 32
+; CHECK-NEXT:.seh_endepilogue
+; CHECK-NEXT:ret
+; CHECK-NEXT:.seh_endfunclet
+; CHECK-NEXT:.seh_endproc
+entry:
+  %x = alloca i32, align 4
+  %0 = bitcast i32* %x to i8*
+  call void @callee(i32* nonnull %x)
+  ret void
+}
+
+declare void @callee(i32*)



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


[llvm-branch-commits] [compiler-rt] daef311 - [compiler-rt] Add NO_EXEC_STACK_DIRECTIVE on s390x

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Timm Bäder
Date: 2022-05-18T20:09:52-07:00
New Revision: daef3113e81920dcca89d068737ad1c04d79f0d1

URL: 
https://github.com/llvm/llvm-project/commit/daef3113e81920dcca89d068737ad1c04d79f0d1
DIFF: 
https://github.com/llvm/llvm-project/commit/daef3113e81920dcca89d068737ad1c04d79f0d1.diff

LOG: [compiler-rt] Add NO_EXEC_STACK_DIRECTIVE on s390x

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

(cherry picked from commit 791e0d1bc85d1963abddb96cadcdf201c43a029f)

Added: 


Modified: 
compiler-rt/lib/tsan/rtl/tsan_rtl_s390x.S

Removed: 




diff  --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_s390x.S 
b/compiler-rt/lib/tsan/rtl/tsan_rtl_s390x.S
index fcff35fbc7e07..2f445e8f1b206 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_s390x.S
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_s390x.S
@@ -45,3 +45,5 @@ intercept setjmp, _ZN14__interception11real_setjmpE
 intercept _setjmp, _ZN14__interception12real__setjmpE
 intercept sigsetjmp, _ZN14__interception14real_sigsetjmpE
 intercept __sigsetjmp, _ZN14__interception16real___sigsetjmpE
+
+NO_EXEC_STACK_DIRECTIVE



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


[llvm-branch-commits] [clang] d631924 - [CodeGen] Use ABI alignment for C++ new expressions

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Daniel Bertalan
Date: 2022-05-18T20:10:10-07:00
New Revision: d6319246f89b2f47c9176e23be3fbe23c7c7d2c4

URL: 
https://github.com/llvm/llvm-project/commit/d6319246f89b2f47c9176e23be3fbe23c7c7d2c4
DIFF: 
https://github.com/llvm/llvm-project/commit/d6319246f89b2f47c9176e23be3fbe23c7c7d2c4.diff

LOG: [CodeGen] Use ABI alignment for C++ new expressions

In case of placement new, if we do not know the alignment of the
operand, we can't assume it has the preferred alignment. It might be
e.g. a pointer to a struct member which follows ABI alignment rules.

This makes UBSAN no longer report "constructor call on misaligned
address" when constructing a double into a struct field of type double
on i686. The psABI specifies an alignment of 4 bytes, but the preferred
alignment used by Clang is 8 bytes.

We now use ABI alignment for allocating new as well, as the preferred
alignment should be used for over-aligning e.g. local variables, which
isn't relevant for ABI code dealing with operator new. AFAICT there
wouldn't be problems either way though.

Fixes #54845.

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

(cherry picked from commit 93a8225da1f983cccb3e4b5e762369121aaa7dd5)

Added: 
clang/test/CodeGenCXX/pr54845.cpp

Modified: 
clang/lib/CodeGen/CGExprCXX.cpp

Removed: 




diff  --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp
index f06d218617400..3a3acf98f3094 100644
--- a/clang/lib/CodeGen/CGExprCXX.cpp
+++ b/clang/lib/CodeGen/CGExprCXX.cpp
@@ -1572,7 +1572,7 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const 
CXXNewExpr *E) {
   llvm::Value *allocSize =
 EmitCXXNewAllocSize(*this, E, minElements, numElements,
 allocSizeWithoutCookie);
-  CharUnits allocAlign = getContext().getPreferredTypeAlignInChars(allocType);
+  CharUnits allocAlign = getContext().getTypeAlignInChars(allocType);
 
   // Emit the allocation call.  If the allocator is a global placement
   // operator, just "inline" it directly.

diff  --git a/clang/test/CodeGenCXX/pr54845.cpp 
b/clang/test/CodeGenCXX/pr54845.cpp
new file mode 100644
index 0..acf2c3121900b
--- /dev/null
+++ b/clang/test/CodeGenCXX/pr54845.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -triple i686-linux-gnu -emit-llvm %s -o - | FileCheck %s
+// https://github.com/llvm/llvm-project/issues/54845
+
+void *operator new(unsigned int, void *);
+
+void test(double *d) {
+  // This store used to have an alignment of 8, which was incorrect as
+  // the i386 psABI only guarantees a 4-byte alignment for doubles.
+
+  // CHECK: store double 0.00e+00, {{.*}}, align 4
+  new (d) double(0);
+}



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


[llvm-branch-commits] [lld] e70d79f - [ELF] Ignore --no-add-needed

2022-05-18 Thread Tom Stellard via llvm-branch-commits

Author: Fangrui Song
Date: 2022-05-18T20:28:53-07:00
New Revision: e70d79f1e8c0802c4039d2d66131c00590d49722

URL: 
https://github.com/llvm/llvm-project/commit/e70d79f1e8c0802c4039d2d66131c00590d49722
DIFF: 
https://github.com/llvm/llvm-project/commit/e70d79f1e8c0802c4039d2d66131c00590d49722.diff

LOG: [ELF] Ignore --no-add-needed

It is used by a few projects like keepassxc and mumble.
Also see https://bugzilla.redhat.com/show_bug.cgi?id=2070813 that Fedora gcc has
an (unneeded) gcc12-no-add-needed.patch which adds --no-add-needed, although
--[no-]add-needed has been deprecated in GNU ld since 2009. Adding this has low
costs and makes several folks happy.

This basically restores 8f13bef575c97db4d6c146c3bb647ac9e73a9248.

Fixes https://github.com/llvm/llvm-project/issues/54756

(cherry picked from commit c29c19cb5327624dd31fcb776f8fbe66ca1011bb)

Added: 


Modified: 
lld/ELF/Options.td
lld/test/ELF/silent-ignore.test

Removed: 




diff  --git a/lld/ELF/Options.td b/lld/ELF/Options.td
index ca9fdcde791f0..cf2013a5f8204 100644
--- a/lld/ELF/Options.td
+++ b/lld/ELF/Options.td
@@ -695,6 +695,7 @@ def plugin_opt_eq : J<"plugin-opt=">;
 def: F<"detect-odr-violations">;
 def: Flag<["-"], "g">;
 def: F<"long-plt">;
+def: FF<"no-add-needed">;
 def: F<"no-copy-dt-needed-entries">;
 def: F<"no-ctors-in-init-array">;
 def: F<"no-keep-memory">;

diff  --git a/lld/test/ELF/silent-ignore.test b/lld/test/ELF/silent-ignore.test
index 91b57434765f2..923afb2b5021e 100644
--- a/lld/test/ELF/silent-ignore.test
+++ b/lld/test/ELF/silent-ignore.test
@@ -2,6 +2,7 @@ RUN: ld.lld --version \
 RUN:   -detect-odr-violations \
 RUN:   -g \
 RUN:   -long-plt \
+RUN:   --no-add-needed \
 RUN:   -no-copy-dt-needed-entries \
 RUN:   -no-ctors-in-init-array \
 RUN:   -no-keep-memory \



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