llvm/test/CodeGen/AMDGPU/bug-vopc-commute.ll
Matt Arsenault d019e8638a Enable FeatureFlatForGlobal on Volcanic Islands
This switches to the workaround that HSA defaults to
for the mesa path.

This should be applied to the 4.0 branch.

Patch by Vedran Miletić <vedran@miletic.net>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292982 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-24 22:02:15 +00:00

48 lines
1.6 KiB
LLVM

; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck %s
; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck %s
; CHECK-LABEL: {{^}}main:
;
; Test for compilation only. This generated an invalid machine instruction
; by trying to commute the operands of a V_CMP_EQ_i32_e32 instruction, both
; of which were in SGPRs.
define amdgpu_vs float @main(i32 %v) {
main_body:
%d1 = call float @llvm.SI.load.const(<16 x i8> undef, i32 960)
%d2 = call float @llvm.SI.load.const(<16 x i8> undef, i32 976)
br i1 undef, label %ENDIF56, label %IF57
IF57: ; preds = %ENDIF
%v.1 = mul i32 %v, 2
br label %ENDIF56
ENDIF56: ; preds = %IF57, %ENDIF
%v.2 = phi i32 [ %v, %main_body ], [ %v.1, %IF57 ]
%d1.i = bitcast float %d1 to i32
%cc1 = icmp eq i32 %d1.i, 0
br i1 %cc1, label %ENDIF59, label %IF60
IF60: ; preds = %ENDIF56
%v.3 = mul i32 %v.2, 2
br label %ENDIF59
ENDIF59: ; preds = %IF60, %ENDIF56
%v.4 = phi i32 [ %v.2, %ENDIF56 ], [ %v.3, %IF60 ]
%d2.i = bitcast float %d2 to i32
%cc2 = icmp eq i32 %d2.i, 0
br i1 %cc2, label %ENDIF62, label %IF63
IF63: ; preds = %ENDIF59
unreachable
ENDIF62: ; preds = %ENDIF59
%r = bitcast i32 %v.4 to float
ret float %r
}
; Function Attrs: nounwind readnone
declare float @llvm.SI.load.const(<16 x i8>, i32) #0
attributes #0 = { nounwind readnone }
attributes #1 = { readnone }