mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-03 17:24:24 +00:00
X86: @llvm.frameaddress should defer to SelectionDAG for Win CFI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228754 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
19332b06c3
commit
f2138c2df8
@ -37,6 +37,7 @@
|
||||
#include "llvm/IR/Instructions.h"
|
||||
#include "llvm/IR/IntrinsicInst.h"
|
||||
#include "llvm/IR/Operator.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
using namespace llvm;
|
||||
@ -2136,6 +2137,10 @@ bool X86FastISel::fastLowerIntrinsicCall(const IntrinsicInst *II) {
|
||||
switch (II->getIntrinsicID()) {
|
||||
default: return false;
|
||||
case Intrinsic::frameaddress: {
|
||||
MachineFunction *MF = FuncInfo.MF;
|
||||
if (MF->getTarget().getMCAsmInfo()->usesWindowsCFI())
|
||||
return false;
|
||||
|
||||
Type *RetTy = II->getCalledFunction()->getReturnType();
|
||||
|
||||
MVT VT;
|
||||
@ -2153,11 +2158,11 @@ bool X86FastISel::fastLowerIntrinsicCall(const IntrinsicInst *II) {
|
||||
|
||||
// This needs to be set before we call getPtrSizedFrameRegister, otherwise
|
||||
// we get the wrong frame register.
|
||||
MachineFrameInfo *MFI = FuncInfo.MF->getFrameInfo();
|
||||
MachineFrameInfo *MFI = MF->getFrameInfo();
|
||||
MFI->setFrameAddressIsTaken(true);
|
||||
|
||||
const X86RegisterInfo *RegInfo = Subtarget->getRegisterInfo();
|
||||
unsigned FrameReg = RegInfo->getPtrSizedFrameRegister(*(FuncInfo.MF));
|
||||
unsigned FrameReg = RegInfo->getPtrSizedFrameRegister(*MF);
|
||||
assert(((FrameReg == X86::RBP && VT == MVT::i64) ||
|
||||
(FrameReg == X86::EBP && VT == MVT::i32)) &&
|
||||
"Invalid Frame Register!");
|
||||
|
@ -1,5 +1,6 @@
|
||||
; RUN: llc < %s -march=x86 | FileCheck %s --check-prefix=CHECK-32
|
||||
; RUN: llc < %s -march=x86 -fast-isel -fast-isel-abort | FileCheck %s --check-prefix=CHECK-32
|
||||
; RUN: llc < %s -mtriple=x86_64-pc-win32 -fast-isel | FileCheck %s --check-prefix=CHECK-W64
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=CHECK-64
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown -fast-isel -fast-isel-abort | FileCheck %s --check-prefix=CHECK-64
|
||||
; RUN: llc < %s -mtriple=x86_64-gnux32 | FileCheck %s --check-prefix=CHECK-X32ABI
|
||||
@ -15,6 +16,12 @@ entry:
|
||||
; CHECK-32-NEXT: movl %ebp, %eax
|
||||
; CHECK-32-NEXT: pop
|
||||
; CHECK-32-NEXT: ret
|
||||
; CHECK-W64-LABEL: test1
|
||||
; CHECK-W64: push
|
||||
; CHECK-W64-NEXT: leaq (%rsp), %rbp
|
||||
; CHECK-W64-NEXT: leaq (%rbp), %rax
|
||||
; CHECK-W64-NEXT: pop
|
||||
; CHECK-W64-NEXT: ret
|
||||
; CHECK-64-LABEL: test1
|
||||
; CHECK-64: push
|
||||
; CHECK-64-NEXT: movq %rsp, %rbp
|
||||
@ -44,6 +51,12 @@ entry:
|
||||
; CHECK-32-NEXT: movl (%eax), %eax
|
||||
; CHECK-32-NEXT: pop
|
||||
; CHECK-32-NEXT: ret
|
||||
; CHECK-W64-LABEL: test2
|
||||
; CHECK-W64: push
|
||||
; CHECK-W64-NEXT: leaq (%rsp), %rbp
|
||||
; CHECK-W64-NEXT: leaq (%rbp), %rax
|
||||
; CHECK-W64-NEXT: pop
|
||||
; CHECK-W64-NEXT: ret
|
||||
; CHECK-64-LABEL: test2
|
||||
; CHECK-64: push
|
||||
; CHECK-64-NEXT: movq %rsp, %rbp
|
||||
|
Loading…
x
Reference in New Issue
Block a user