summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/StructurizeCFG
diff options
context:
space:
mode:
authorMarek Olsak <marek.olsak@amd.com>2018-05-15 21:41:55 +0000
committerMarek Olsak <marek.olsak@amd.com>2018-05-15 21:41:55 +0000
commit3c5fd145c5f6fc2ee570e9c329700f8a9960eae0 (patch)
tree3e561416617f0dcf327280d0436c6d55ee2f3600 /llvm/test/Transforms/StructurizeCFG
parent091fed94ae701005ccfde290713c4908e25008d4 (diff)
downloadbcm5719-llvm-3c5fd145c5f6fc2ee570e9c329700f8a9960eae0.tar.gz
bcm5719-llvm-3c5fd145c5f6fc2ee570e9c329700f8a9960eae0.zip
StructurizeCFG: fix inverting conditions
Author: Samuel Pitoiset Without this patch, it appears to me that we are selecting the wrong operand when inverting conditions. In the attached test, it will select %tmp3 instead of %tmp4. To fix it, just use 'A' as everywhere. This fixes a regression introduced by "[PatternMatch] define m_Not using m_Xor and cst_pred_ty" https://reviews.llvm.org/D46351 llvm-svn: 332403
Diffstat (limited to 'llvm/test/Transforms/StructurizeCFG')
-rw-r--r--llvm/test/Transforms/StructurizeCFG/invert-condition.ll30
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/Transforms/StructurizeCFG/invert-condition.ll b/llvm/test/Transforms/StructurizeCFG/invert-condition.ll
new file mode 100644
index 00000000000..c5db5ad0e4d
--- /dev/null
+++ b/llvm/test/Transforms/StructurizeCFG/invert-condition.ll
@@ -0,0 +1,30 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -structurizecfg %s | FileCheck %s
+
+define void @invert_condition(i1 %arg) {
+; CHECK-LABEL: @invert_condition(
+; CHECK-NEXT: bb:
+; CHECK-NEXT: [[TMP:%.*]] = load volatile float, float addrspace(1)* undef
+; CHECK-NEXT: [[TMP1:%.*]] = load volatile float, float addrspace(1)* undef
+; CHECK-NEXT: br label [[BB2:%.*]]
+; CHECK: bb2:
+; CHECK-NEXT: [[TMP3:%.*]] = fcmp oge float [[TMP]], [[TMP1]]
+; CHECK-NEXT: [[TMP4:%.*]] = xor i1 [[ARG:%.*]], [[TMP3]]
+; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[TMP4]], true
+; CHECK-NEXT: br i1 [[TMP0]], label [[BB5:%.*]], label [[BB2]]
+; CHECK: bb5:
+; CHECK-NEXT: ret void
+;
+bb:
+ %tmp = load volatile float, float addrspace(1)* undef
+ %tmp1 = load volatile float, float addrspace(1)* undef
+ br label %bb2
+
+bb2: ; preds = %bb2, %bb
+ %tmp3 = fcmp oge float %tmp, %tmp1
+ %tmp4 = xor i1 %arg, %tmp3
+ br i1 %tmp4, label %bb2, label %bb5
+
+bb5: ; preds = %bb2
+ ret void
+}
OpenPOWER on IntegriCloud