This patch makes LICM use `ICFLoopSafetyInfo` that is a smarter version of LoopSafetyInfo that leverages power of Implicit Control Flow Tracking to keep track of throwing instructions and give less pessimistic answers to queries related to throws. The ICFLoopSafetyInfo itself has been introduced in rL344601. This patch enables it in LICM only. Differential Revision: https://reviews.llvm.org/D50377 Reviewed By: apilipenko llvm-svn: 346201
28 lines
960 B
LLVM
28 lines
960 B
LLVM
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
|
|
|
|
; There was an infinite loop in DAGCombiner from a target build_vector
|
|
; combine and a generic insert_vector_elt combine.
|
|
|
|
; GCN-LABEL: {{^}}combine_loop:
|
|
; GCN: flat_load_ushort
|
|
; GCN: flat_store_short
|
|
; GCN: v_lshlrev_b32_e32 v{{[0-9]+}}, 16,
|
|
define amdgpu_kernel void @combine_loop(i16* %arg) #0 {
|
|
bb:
|
|
br label %bb1
|
|
|
|
bb1:
|
|
%tmp = phi <2 x i16> [ <i16 15360, i16 15360>, %bb ], [ %tmp5, %bb1 ]
|
|
%tmp2 = phi half [ 0xH0000, %bb ], [ %tmp8, %bb1 ]
|
|
%tmp3 = load volatile half, half* null, align 536870912
|
|
%tmp4 = bitcast half %tmp3 to i16
|
|
%tmp5 = insertelement <2 x i16> <i16 0, i16 undef>, i16 %tmp4, i32 1
|
|
%tmp6 = bitcast i16* %arg to half*
|
|
store volatile half %tmp2, half* %tmp6, align 2
|
|
%tmp7 = bitcast <2 x i16> %tmp to <2 x half>
|
|
%tmp8 = extractelement <2 x half> %tmp7, i32 0
|
|
br label %bb1
|
|
}
|
|
|
|
attributes #0 = { nounwind }
|