-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #42041 from JuliaLang/vc/llvm_13
Allow Julia to build on LLVM 13
- Loading branch information
Showing
12 changed files
with
923 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
From d82434785ecab16223a0bd4ec8ede020bf244003 Mon Sep 17 00:00:00 2001 | ||
From: Keno Fischer <keno@juliacomputing.com> | ||
Date: Mon, 1 Mar 2021 16:42:05 -0500 | ||
Subject: [PATCH 4/4] AArch64: Remove Bad optimization | ||
|
||
Removes the code responsible for causing https://bugs.llvm.org/show_bug.cgi?id=49357. | ||
A fix is in progress upstream, but I don't think it's easy, so this | ||
fixes the bug in the meantime. The optimization it does is minor. | ||
--- | ||
llvm/lib/Target/AArch64/AArch64FastISel.cpp | 19 --------------------- | ||
1 file changed, 19 deletions(-) | ||
|
||
diff --git llvm/lib/Target/AArch64/AArch64FastISel.cpp llvm/lib/Target/AArch64/AArch64FastISel.cpp | ||
index 9acda17b816f..5f0c7922569b 100644 | ||
--- llvm/lib/Target/AArch64/AArch64FastISel.cpp | ||
+++ llvm/lib/Target/AArch64/AArch64FastISel.cpp | ||
@@ -4494,25 +4494,6 @@ bool AArch64FastISel::selectIntExt(const Instruction *I) { | ||
if (!SrcReg) | ||
return false; | ||
|
||
- // Try to optimize already sign-/zero-extended values from function arguments. | ||
- bool IsZExt = isa<ZExtInst>(I); | ||
- if (const auto *Arg = dyn_cast<Argument>(I->getOperand(0))) { | ||
- if ((IsZExt && Arg->hasZExtAttr()) || (!IsZExt && Arg->hasSExtAttr())) { | ||
- if (RetVT == MVT::i64 && SrcVT != MVT::i64) { | ||
- unsigned ResultReg = createResultReg(&AArch64::GPR64RegClass); | ||
- BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DbgLoc, | ||
- TII.get(AArch64::SUBREG_TO_REG), ResultReg) | ||
- .addImm(0) | ||
- .addReg(SrcReg) | ||
- .addImm(AArch64::sub_32); | ||
- SrcReg = ResultReg; | ||
- } | ||
- | ||
- updateValueMap(I, SrcReg); | ||
- return true; | ||
- } | ||
- } | ||
- | ||
unsigned ResultReg = emitIntExt(SrcVT, SrcReg, RetVT, IsZExt); | ||
if (!ResultReg) | ||
return false; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
From d914f133f8d6770cfd230e1b55aef67c16d19473 Mon Sep 17 00:00:00 2001 | ||
From: Elliot Saba <staticfloat@gmail.com> | ||
Date: Tue, 7 Sep 2021 10:10:49 -0400 | ||
Subject: [PATCH] [X86] Don't clobber EBX in stackprobes | ||
|
||
On X86, the stackprobe emission code chooses the `R11D` register, which | ||
is illegal on i686. This ends up wrapping around to `EBX`, which does | ||
not get properly callee-saved within the stack probing prologue, | ||
clobbering the register for the callers. | ||
|
||
We fix this by explicitly using `EAX` as the stack probe register. | ||
|
||
Reviewed By: pengfei | ||
|
||
Differential Revision: https://reviews.llvm.org/D109203 | ||
--- | ||
llvm/lib/Target/X86/X86FrameLowering.cpp | 8 +- | ||
llvm/test/CodeGen/X86/stack-clash-large.ll | 97 +++++++++++++--------- | ||
2 files changed, 64 insertions(+), 41 deletions(-) | ||
|
||
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp | ||
index 4cde7971e597..86cb86b19d62 100644 | ||
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp | ||
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp | ||
@@ -671,7 +671,9 @@ void X86FrameLowering::emitStackProbeInlineGenericLoop( | ||
MF.insert(MBBIter, testMBB); | ||
MF.insert(MBBIter, tailMBB); | ||
|
||
- Register FinalStackProbed = Uses64BitFramePtr ? X86::R11 : X86::R11D; | ||
+ Register FinalStackProbed = Uses64BitFramePtr ? X86::R11 | ||
+ : Is64Bit ? X86::R11D | ||
+ : X86::EAX; | ||
BuildMI(MBB, MBBI, DL, TII.get(TargetOpcode::COPY), FinalStackProbed) | ||
.addReg(StackPtr) | ||
.setMIFlag(MachineInstr::FrameSetup); | ||
@@ -1092,7 +1094,9 @@ void X86FrameLowering::BuildStackAlignAND(MachineBasicBlock &MBB, | ||
MF.insert(MBBIter, bodyMBB); | ||
MF.insert(MBBIter, footMBB); | ||
const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; | ||
- Register FinalStackProbed = Uses64BitFramePtr ? X86::R11 : X86::R11D; | ||
+ Register FinalStackProbed = Uses64BitFramePtr ? X86::R11 | ||
+ : Is64Bit ? X86::R11D | ||
+ : X86::EAX; | ||
|
||
// Setup entry block | ||
{ | ||
diff --git a/llvm/test/CodeGen/X86/stack-clash-large.ll b/llvm/test/CodeGen/X86/stack-clash-large.ll | ||
index 9129e4ed40fd..00c7843b54f5 100644 | ||
--- a/llvm/test/CodeGen/X86/stack-clash-large.ll | ||
+++ b/llvm/test/CodeGen/X86/stack-clash-large.ll | ||
@@ -1,45 +1,64 @@ | ||
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp | ||
-; RUN: llc -mtriple=x86_64-linux-android < %s | FileCheck -check-prefix=CHECK-X86-64 %s | ||
-; RUN: llc -mtriple=i686-linux-android < %s | FileCheck -check-prefix=CHECK-X86-32 %s | ||
+; RUN: llc -mtriple=x86_64-linux-android < %s | FileCheck -check-prefix=CHECK-X64 %s | ||
+; RUN: llc -mtriple=i686-linux-android < %s | FileCheck -check-prefix=CHECK-X86 %s | ||
+; RUN: llc -mtriple=x86_64-linux-gnux32 < %s | FileCheck -check-prefix=CHECK-X32 %s | ||
|
||
define i32 @foo() local_unnamed_addr #0 { | ||
-; CHECK-X86-64-LABEL: foo: | ||
-; CHECK-X86-64: # %bb.0: | ||
-; CHECK-X86-64-NEXT: movq %rsp, %r11 | ||
-; CHECK-X86-64-NEXT: subq $69632, %r11 # imm = 0x11000 | ||
-; CHECK-X86-64-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1 | ||
-; CHECK-X86-64-NEXT: subq $4096, %rsp # imm = 0x1000 | ||
-; CHECK-X86-64-NEXT: movq $0, (%rsp) | ||
-; CHECK-X86-64-NEXT: cmpq %r11, %rsp | ||
-; CHECK-X86-64-NEXT: jne .LBB0_1 | ||
-; CHECK-X86-64-NEXT: # %bb.2: | ||
-; CHECK-X86-64-NEXT: subq $2248, %rsp # imm = 0x8C8 | ||
-; CHECK-X86-64-NEXT: .cfi_def_cfa_offset 71888 | ||
-; CHECK-X86-64-NEXT: movl $1, 264(%rsp) | ||
-; CHECK-X86-64-NEXT: movl $1, 28664(%rsp) | ||
-; CHECK-X86-64-NEXT: movl -128(%rsp), %eax | ||
-; CHECK-X86-64-NEXT: addq $71880, %rsp # imm = 0x118C8 | ||
-; CHECK-X86-64-NEXT: .cfi_def_cfa_offset 8 | ||
-; CHECK-X86-64-NEXT: retq | ||
+; CHECK-X64-LABEL: foo: | ||
+; CHECK-X64: # %bb.0: | ||
+; CHECK-X64-NEXT: movq %rsp, %r11 | ||
+; CHECK-X64-NEXT: subq $69632, %r11 # imm = 0x11000 | ||
+; CHECK-X64-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1 | ||
+; CHECK-X64-NEXT: subq $4096, %rsp # imm = 0x1000 | ||
+; CHECK-X64-NEXT: movq $0, (%rsp) | ||
+; CHECK-X64-NEXT: cmpq %r11, %rsp | ||
+; CHECK-X64-NEXT: jne .LBB0_1 | ||
+; CHECK-X64-NEXT: # %bb.2: | ||
+; CHECK-X64-NEXT: subq $2248, %rsp # imm = 0x8C8 | ||
+; CHECK-X64-NEXT: .cfi_def_cfa_offset 71888 | ||
+; CHECK-X64-NEXT: movl $1, 264(%rsp) | ||
+; CHECK-X64-NEXT: movl $1, 28664(%rsp) | ||
+; CHECK-X64-NEXT: movl -128(%rsp), %eax | ||
+; CHECK-X64-NEXT: addq $71880, %rsp # imm = 0x118C8 | ||
+; CHECK-X64-NEXT: .cfi_def_cfa_offset 8 | ||
+; CHECK-X64-NEXT: retq | ||
; | ||
-; CHECK-X86-32-LABEL: foo: | ||
-; CHECK-X86-32: # %bb.0: | ||
-; CHECK-X86-32-NEXT: movl %esp, %r11d | ||
-; CHECK-X86-32-NEXT: subl $69632, %r11d # imm = 0x11000 | ||
-; CHECK-X86-32-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1 | ||
-; CHECK-X86-32-NEXT: subl $4096, %esp # imm = 0x1000 | ||
-; CHECK-X86-32-NEXT: movl $0, (%esp) | ||
-; CHECK-X86-32-NEXT: cmpl %r11d, %esp | ||
-; CHECK-X86-32-NEXT: jne .LBB0_1 | ||
-; CHECK-X86-32-NEXT: # %bb.2: | ||
-; CHECK-X86-32-NEXT: subl $2380, %esp # imm = 0x94C | ||
-; CHECK-X86-32-NEXT: .cfi_def_cfa_offset 72016 | ||
-; CHECK-X86-32-NEXT: movl $1, 392(%esp) | ||
-; CHECK-X86-32-NEXT: movl $1, 28792(%esp) | ||
-; CHECK-X86-32-NEXT: movl (%esp), %eax | ||
-; CHECK-X86-32-NEXT: addl $72012, %esp # imm = 0x1194C | ||
-; CHECK-X86-32-NEXT: .cfi_def_cfa_offset 4 | ||
-; CHECK-X86-32-NEXT: retl | ||
+; CHECK-X86-LABEL: foo: | ||
+; CHECK-X86: # %bb.0: | ||
+; CHECK-X86-NEXT: movl %esp, %eax | ||
+; CHECK-X86-NEXT: subl $69632, %eax # imm = 0x11000 | ||
+; CHECK-X86-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1 | ||
+; CHECK-X86-NEXT: subl $4096, %esp # imm = 0x1000 | ||
+; CHECK-X86-NEXT: movl $0, (%esp) | ||
+; CHECK-X86-NEXT: cmpl %eax, %esp | ||
+; CHECK-X86-NEXT: jne .LBB0_1 | ||
+; CHECK-X86-NEXT: # %bb.2: | ||
+; CHECK-X86-NEXT: subl $2380, %esp # imm = 0x94C | ||
+; CHECK-X86-NEXT: .cfi_def_cfa_offset 72016 | ||
+; CHECK-X86-NEXT: movl $1, 392(%esp) | ||
+; CHECK-X86-NEXT: movl $1, 28792(%esp) | ||
+; CHECK-X86-NEXT: movl (%esp), %eax | ||
+; CHECK-X86-NEXT: addl $72012, %esp # imm = 0x1194C | ||
+; CHECK-X86-NEXT: .cfi_def_cfa_offset 4 | ||
+; CHECK-X86-NEXT: retl | ||
+; | ||
+; CHECK-X32-LABEL: foo: | ||
+; CHECK-X32: # %bb.0: | ||
+; CHECK-X32-NEXT: movl %esp, %r11d | ||
+; CHECK-X32-NEXT: subl $69632, %r11d # imm = 0x11000 | ||
+; CHECK-X32-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1 | ||
+; CHECK-X32-NEXT: subl $4096, %esp # imm = 0x1000 | ||
+; CHECK-X32-NEXT: movq $0, (%esp) | ||
+; CHECK-X32-NEXT: cmpl %r11d, %esp | ||
+; CHECK-X32-NEXT: jne .LBB0_1 | ||
+; CHECK-X32-NEXT: # %bb.2: | ||
+; CHECK-X32-NEXT: subl $2248, %esp # imm = 0x8C8 | ||
+; CHECK-X32-NEXT: .cfi_def_cfa_offset 71888 | ||
+; CHECK-X32-NEXT: movl $1, 264(%esp) | ||
+; CHECK-X32-NEXT: movl $1, 28664(%esp) | ||
+; CHECK-X32-NEXT: movl -128(%esp), %eax | ||
+; CHECK-X32-NEXT: addl $71880, %esp # imm = 0x118C8 | ||
+; CHECK-X32-NEXT: .cfi_def_cfa_offset 8 | ||
+; CHECK-X32-NEXT: retq | ||
%a = alloca i32, i64 18000, align 16 | ||
%b0 = getelementptr inbounds i32, i32* %a, i64 98 | ||
%b1 = getelementptr inbounds i32, i32* %a, i64 7198 | ||
-- | ||
2.33.0 | ||
|
Oops, something went wrong.