aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/AMDGPU/legalizedag-bug-expand-setcc.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGen/AMDGPU/legalizedag-bug-expand-setcc.ll')
-rw-r--r--test/CodeGen/AMDGPU/legalizedag-bug-expand-setcc.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/CodeGen/AMDGPU/legalizedag-bug-expand-setcc.ll b/test/CodeGen/AMDGPU/legalizedag-bug-expand-setcc.ll
new file mode 100644
index 000000000000..4244c48d240e
--- /dev/null
+++ b/test/CodeGen/AMDGPU/legalizedag-bug-expand-setcc.ll
@@ -0,0 +1,26 @@
+; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
+
+; This tests a bug where LegalizeDAG was not checking the target's
+; BooleanContents value and always using one for true, when expanding
+; setcc to select_cc.
+;
+; This bug caused the icmp IR instruction to be expanded to two machine
+; instructions, when only one is needed.
+;
+
+; CHECK: {{^}}setcc_expand:
+; CHECK: SET
+; CHECK-NOT: CND
+define void @setcc_expand(i32 addrspace(1)* %out, i32 %in) {
+entry:
+ %0 = icmp eq i32 %in, 5
+ br i1 %0, label %IF, label %ENDIF
+IF:
+ %1 = getelementptr i32, i32 addrspace(1)* %out, i32 1
+ store i32 0, i32 addrspace(1)* %1
+ br label %ENDIF
+
+ENDIF:
+ store i32 0, i32 addrspace(1)* %out
+ ret void
+}