From 1e01ade2e8424563e5e3da97858bfd67f8697bdd Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 6 Jan 2011 17:35:50 +0000 Subject: [PATCH] Add a note from llvmdev, this time with more info. llvm-svn: 122966 --- llvm/lib/Target/README.txt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/llvm/lib/Target/README.txt b/llvm/lib/Target/README.txt index 29bd10949e58..bedc893fbb10 100644 --- a/llvm/lib/Target/README.txt +++ b/llvm/lib/Target/README.txt @@ -2047,3 +2047,29 @@ entry: } //===---------------------------------------------------------------------===// +clang -O3 currently compiles this code + +int g(unsigned int a) { + unsigned int c[100]; + c[10] = a; + c[11] = a; + unsigned int b = c[10] + c[11]; + if(b > a*2) a = 4; + else a = 8; + return a + 7; +} + +into + +define i32 @g(i32 a) nounwind readnone { + %add = shl i32 %a, 1 + %mul = shl i32 %a, 1 + %cmp = icmp ugt i32 %add, %mul + %a.addr.0 = select i1 %cmp, i32 11, i32 15 + ret i32 %a.addr.0 +} + +The icmp should fold to false. This CSE opportunity is only available +after GVN and InstCombine have run. + +//===---------------------------------------------------------------------===//