1*1ceccbb0SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2*1ceccbb0SMatt Arsenault; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 -verify-machineinstrs -o - %s | FileCheck %s 3*1ceccbb0SMatt Arsenault 4*1ceccbb0SMatt Arsenault; Check for verifier error after tail duplication. An implicit_def of 5*1ceccbb0SMatt Arsenault; a subregsiter is needed to maintain liveness after assignment. 6*1ceccbb0SMatt Arsenault 7*1ceccbb0SMatt Arsenaultdefine amdgpu_vs void @test(i32 inreg %cmp, i32 %e0) { 8*1ceccbb0SMatt Arsenault; CHECK-LABEL: test: 9*1ceccbb0SMatt Arsenault; CHECK: ; %bb.0: ; %entry 10*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_cmp_eq_u32 s0, 0 11*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_mov_b32 s0, 0 12*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_cbranch_scc1 .LBB0_2 13*1ceccbb0SMatt Arsenault; CHECK-NEXT: ; %bb.1: ; %load 14*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_mov_b32 s1, s0 15*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_mov_b32 s2, s0 16*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_mov_b32 s3, s0 17*1ceccbb0SMatt Arsenault; CHECK-NEXT: v_mov_b32_e32 v1, 0 18*1ceccbb0SMatt Arsenault; CHECK-NEXT: buffer_load_format_xy v[1:2], v1, s[0:3], 0 idxen 19*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_waitcnt vmcnt(0) 20*1ceccbb0SMatt Arsenault; CHECK-NEXT: exp mrt0 v0, v1, v2, v0 21*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_endpgm 22*1ceccbb0SMatt Arsenault; CHECK-NEXT: .LBB0_2: 23*1ceccbb0SMatt Arsenault; CHECK-NEXT: v_mov_b32_e32 v1, 0 24*1ceccbb0SMatt Arsenault; CHECK-NEXT: exp mrt0 v0, v1, v2, v0 25*1ceccbb0SMatt Arsenault; CHECK-NEXT: s_endpgm 26*1ceccbb0SMatt Arsenaultentry: 27*1ceccbb0SMatt Arsenault %cond = icmp eq i32 %cmp, 0 28*1ceccbb0SMatt Arsenault br i1 %cond, label %end, label %load 29*1ceccbb0SMatt Arsenault 30*1ceccbb0SMatt Arsenaultload: 31*1ceccbb0SMatt Arsenault %data1 = call <2 x i32> @llvm.amdgcn.struct.buffer.load.format.v2i32(<4 x i32> zeroinitializer, i32 0, i32 0, i32 0, i32 0) 32*1ceccbb0SMatt Arsenault %e1 = extractelement <2 x i32> %data1, i32 0 33*1ceccbb0SMatt Arsenault %e2 = extractelement <2 x i32> %data1, i32 1 34*1ceccbb0SMatt Arsenault br label %end 35*1ceccbb0SMatt Arsenault 36*1ceccbb0SMatt Arsenaultend: 37*1ceccbb0SMatt Arsenault %out1 = phi i32 [ 0, %entry ], [ %e1, %load ] 38*1ceccbb0SMatt Arsenault %out2 = phi i32 [ poison, %entry ], [ %e2, %load ] 39*1ceccbb0SMatt Arsenault call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 %e0, i32 %out1, i32 %out2, i32 %e0, i1 false, i1 false) 40*1ceccbb0SMatt Arsenault ret void 41*1ceccbb0SMatt Arsenault} 42*1ceccbb0SMatt Arsenault 43