Add a synthetic missed optimization.
authorNick Lewycky <nicholas@mxc.ca>
Thu, 27 Nov 2008 22:12:22 +0000 (22:12 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Thu, 27 Nov 2008 22:12:22 +0000 (22:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60186 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/README.txt

index c4161c36c373569700a993ac34bd327ce9c2dd60..f6f24eb676a0590b6777c81819fe2b08ca6398e7 100644 (file)
@@ -984,3 +984,27 @@ define i1 @test(i8 %x) {
 }
 
 //===---------------------------------------------------------------------===//
+
+These three functions all perform the same computation, but produce different
+assembly. On x86, they are sorted from slowest to fastest.
+
+define i8 @udiv(i8 %x) readnone nounwind {
+  %A = udiv i8 %x, 250
+  ret i8 %A
+}
+
+define i8 @select(i8 %x) readnone nounwind {
+  %A = icmp ult i8 %x, 250
+  %B = select i1 %A, i8 0, i8 1
+  ret i8 %B 
+}
+
+define i8 @addshr(i8 %x) readnone nounwind {
+  %A = zext i8 %x to i9
+  %B = add i9 %A, 6       ;; 256 - 250 == 6
+  %C = lshr i9 %B, 8
+  %D = trunc i9 %C to i8
+  ret i8 %D
+}
+
+//===---------------------------------------------------------------------===//