summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2008-11-09 23:17:42 +0000
committerBill Wendling <isanbard@gmail.com>2008-11-09 23:17:42 +0000
commit1579287550505d49e2cb1adcd696bfbe6f969db0 (patch)
tree9692bbc078288889751fea59cecfce90830e8906 /llvm/test
parent8ad00b26eee7044ca0e6912e0b3be770526ec8e8 (diff)
downloadbcm5719-llvm-1579287550505d49e2cb1adcd696bfbe6f969db0.tar.gz
bcm5719-llvm-1579287550505d49e2cb1adcd696bfbe6f969db0.zip
The method of doing the matching with a 'select' instruction was wrong. The
original code was matching like this: if (match(A, m_Not(m_Value(B)))) B was already matched as a 'select' instruction. However, this isn't matching what we think it's matching. It would match B as a 'Value', so basically anything would match to it. In this case, a Constant matched. B was replaced with a constant representation. And then the wrong value would be used in the SelectInst::Create statement, causing a crash. After thinking on this for a moment, and after Nick L. told me how the pattern matching stuff was supposed to work, the solution was to match NOT an m_Value, but an m_Select. llvm-svn: 58946
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/FrontendC/2008-11-08-InstCombineSelect.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/FrontendC/2008-11-08-InstCombineSelect.c b/llvm/test/FrontendC/2008-11-08-InstCombineSelect.c
new file mode 100644
index 00000000000..70c8d3a2248
--- /dev/null
+++ b/llvm/test/FrontendC/2008-11-08-InstCombineSelect.c
@@ -0,0 +1,17 @@
+// RUN: %llvmgcc %s -S -emit-llvm -O2 -o -
+// PR3028
+
+int g_187;
+int g_204;
+int g_434;
+
+int func_89 (void)
+{
+ return 1;
+}
+
+void func_20 (int p_22)
+{
+ if (1 & p_22 | g_204 & (1 < g_187) - func_89 ())
+ g_434 = 1;
+}
OpenPOWER on IntegriCloud