2018-12-07 13:25:16 +08:00
|
|
|
; RUN: llc -verify-machineinstrs -o - -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
|
2017-09-23 02:30:02 +08:00
|
|
|
|
|
|
|
define void @ILLBeBack() #0 {
|
2020-04-03 06:28:32 +08:00
|
|
|
; CHECK-LABEL: @ILLBeBack
|
[FIX] Forces shrink wrapping to consider any memory access as aliasing with the stack
Summary:
Relate bug: https://bugs.llvm.org/show_bug.cgi?id=37472
The shrink wrapping pass prematurally restores the stack, at a point where the stack might still be accessed.
Taking an exception can cause the stack to be corrupted.
As a first approach, this patch is overly conservative, assuming that any instruction that may load or store could access
the stack.
Reviewers: dmgreen, qcolombet
Reviewed By: qcolombet
Subscribers: simpal01, efriedma, eli.friedman, javed.absar, llvm-commits, eugenis, chill, carwil, thegameg
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63152
llvm-svn: 363265
2019-06-13 21:56:19 +08:00
|
|
|
; CHECK: bne {{[0-9]+}}, [[LABEL:\.[a-zA-Z0-9_]+]]
|
2017-09-23 02:30:02 +08:00
|
|
|
; CHECK: [[LABEL]]:
|
[FIX] Forces shrink wrapping to consider any memory access as aliasing with the stack
Summary:
Relate bug: https://bugs.llvm.org/show_bug.cgi?id=37472
The shrink wrapping pass prematurally restores the stack, at a point where the stack might still be accessed.
Taking an exception can cause the stack to be corrupted.
As a first approach, this patch is overly conservative, assuming that any instruction that may load or store could access
the stack.
Reviewers: dmgreen, qcolombet
Reviewed By: qcolombet
Subscribers: simpal01, efriedma, eli.friedman, javed.absar, llvm-commits, eugenis, chill, carwil, thegameg
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63152
llvm-svn: 363265
2019-06-13 21:56:19 +08:00
|
|
|
; CHECK: bl __xray_FunctionExit
|
2017-09-23 02:30:02 +08:00
|
|
|
bb:
|
|
|
|
br i1 undef, label %bb1, label %bb8
|
|
|
|
|
|
|
|
bb1:
|
|
|
|
%tmp = tail call i64 asm sideeffect "", "=&r,=*m,b,r,*m,~{cc}"(i64* nonnull undef, i64* nonnull undef, i64 1, i64* nonnull undef)
|
|
|
|
%tmp2 = icmp eq i64 %tmp, 0
|
|
|
|
br i1 %tmp2, label %bb3, label %bb8
|
|
|
|
|
|
|
|
bb3:
|
|
|
|
%tmp4 = tail call i64 asm sideeffect "", "=&r,=*m,b,r,r,*m,~{cc}"(i64* undef, i64* undef, i64 0, i64 undef, i64* undef)
|
|
|
|
%tmp5 = icmp eq i64 0, %tmp4
|
|
|
|
br i1 %tmp5, label %bb6, label %bb3
|
|
|
|
|
|
|
|
bb6:
|
|
|
|
br i1 undef, label %bb7, label %bb8
|
|
|
|
|
|
|
|
bb7:
|
|
|
|
tail call void () undef()
|
|
|
|
ret void
|
|
|
|
|
|
|
|
bb8:
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
attributes #0 = { "function-instrument"="xray-always" }
|