1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
llvm-mirror/test/CodeGen/X86/coalescer-dce.ll
Francis Visoiu Mistrih f7ea499702 Replace "no-frame-pointer-*" function attributes with "frame-pointer"
Part of the effort to refactoring frame pointer code generation. We used
to use two function attributes "no-frame-pointer-elim" and
"no-frame-pointer-elim-non-leaf" to represent three kinds of frame
pointer usage: (all) frames use frame pointer, (non-leaf) frames use
frame pointer, (none) frame use frame pointer. This CL makes the idea
explicit by using only one enum function attribute "frame-pointer"

Option "-frame-pointer=" replaces "-disable-fp-elim" for tools such as
llc.

"no-frame-pointer-elim" and "no-frame-pointer-elim-non-leaf" are still
supported for easy migration to "frame-pointer".

tests are mostly updated with

// replace command line args ‘-disable-fp-elim=false’ with ‘-frame-pointer=none’
grep -iIrnl '\-disable-fp-elim=false' * | xargs sed -i '' -e "s/-disable-fp-elim=false/-frame-pointer=none/g"

// replace command line args ‘-disable-fp-elim’ with ‘-frame-pointer=all’
grep -iIrnl '\-disable-fp-elim' * | xargs sed -i '' -e "s/-disable-fp-elim/-frame-pointer=all/g"

Patch by Yuanfang Chen (tabloid.adroit)!

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

llvm-svn: 351049
2019-01-14 10:55:55 +00:00

81 lines
2.5 KiB
LLVM

; RUN: llc < %s -verify-machineinstrs -frame-pointer=all -disable-machine-dce -verify-coalescing
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-macosx10.7.0"
; This test case has a sub-register join followed by a remat:
;
; 256L %2 = COPY killed %7:sub_32bit; GR32:%2 GR64:%7
; Considering merging %2 with %7:sub_32bit
; Cross-class to GR64.
; RHS = %2 = [256d,272d:0) 0@256d
; LHS = %7 = [208d,256d:0)[304L,480L:0) 0@208d
; updated: 272L %0 = COPY killed %7:sub_32bit; GR32:%0 GR64:%7
; Joined. Result = %7 = [208d,272d:0)[304L,480L:0) 0@208d
;
; 272L %10:sub_32bit = COPY killed %7:sub_32bit, implicit-def %10; GR64:%10,%7
; Considering merging %7 with %10
; RHS = %7 = [208d,272d:0)[304L,480L:0) 0@208d
; LHS = %10 = [16d,64L:2)[64L,160L:1)[192L,240L:1)[272d,304L:3)[304L,352d:1)[352d,400d:0)[400d,400S:4) 0@352d 1@64L-phidef 2@16d-phikill 3@272d-phikill 4@400d
; Remat: %10 = MOV64r0 implicit-def %10, implicit dead %eflags, implicit-def %10; GR64:%10
; Shrink: %7 = [208d,272d:0)[304L,480L:0) 0@208d
; live-in at 240L
; live-in at 416L
; live-in at 320L
; live-in at 304L
; Shrunk: %7 = [208d,256d:0)[304L,480L:0) 0@208d
;
; The COPY at 256L is rewritten as a partial def, and that would artificially
; extend the live range of %7 to end at 256d. When the joined copy is
; removed, -verify-coalescing complains about the dangling kill.
;
; <rdar://problem/9967101>
define void @f1() nounwind uwtable ssp {
bb:
br label %bb1
bb1:
%tmp = phi i32 [ 0, %bb ], [ %tmp21, %bb20 ]
br label %bb2
bb2:
br i1 undef, label %bb5, label %bb8
bb4:
br i1 undef, label %bb2, label %bb20
bb5:
br i1 undef, label %bb4, label %bb20
bb8:
%tmp9 = phi i32 [ %tmp24, %bb23 ], [ 0, %bb2 ]
br i1 false, label %bb41, label %bb10
bb10:
%tmp11 = sub nsw i32 %tmp9, %tmp
br i1 false, label %bb2, label %bb26
bb20:
%tmp21 = phi i32 [ undef, %bb4 ], [ undef, %bb5 ], [ %tmp9, %bb27 ], [ undef, %bb32 ]
%tmp22 = phi i32 [ undef, %bb4 ], [ undef, %bb5 ], [ %tmp11, %bb27 ], [ undef, %bb32 ]
br label %bb1
bb23:
%tmp24 = add nsw i32 %tmp9, 1
br label %bb8
bb26:
br i1 undef, label %bb27, label %bb32
bb27:
%tmp28 = zext i32 %tmp11 to i64
%tmp30 = icmp eq i64 undef, %tmp28
br i1 %tmp30, label %bb20, label %bb27
bb32:
br i1 undef, label %bb20, label %bb23
bb41:
ret void
}