From df563ca1f33a47b6e51f72c9bff2a88f27aa7c8a Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Thu, 27 Nov 2008 22:12:22 +0000 Subject: [PATCH] Add a synthetic missed optimization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60186 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/README.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/Target/README.txt b/lib/Target/README.txt index c4161c36c37..f6f24eb676a 100644 --- a/lib/Target/README.txt +++ b/lib/Target/README.txt @@ -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 +} + +//===---------------------------------------------------------------------===//