[llvm-commits] [llvm] r125832 - /llvm/trunk/lib/Target/X86/README.txt
Chris Lattner
sabre at nondot.org
Thu Feb 17 21:35:49 PST 2011
Author: lattner
Date: Thu Feb 17 23:35:49 2011
New Revision: 125832
URL: http://llvm.org/viewvc/llvm-project?rev=125832&view=rev
Log:
add a poor division by constant case.
Modified:
llvm/trunk/lib/Target/X86/README.txt
Modified: llvm/trunk/lib/Target/X86/README.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/README.txt?rev=125832&r1=125831&r2=125832&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/README.txt (original)
+++ llvm/trunk/lib/Target/X86/README.txt Thu Feb 17 23:35:49 2011
@@ -1884,3 +1884,40 @@
ret
//===---------------------------------------------------------------------===//
+
+This:
+char t(char c) {
+ return c/3;
+}
+
+Compiles to: $clang t.c -S -o - -O3 -mkernel -fomit-frame-pointer
+
+_t: ## @t
+ movslq %edi, %rax
+ imulq $-1431655765, %rax, %rcx ## imm = 0xFFFFFFFFAAAAAAAB
+ shrq $32, %rcx
+ addl %ecx, %eax
+ movl %eax, %ecx
+ shrl $31, %ecx
+ shrl %eax
+ addl %ecx, %eax
+ movsbl %al, %eax
+ ret
+
+GCC gets:
+
+_t:
+ movl $86, %eax
+ imulb %dil
+ shrw $8, %ax
+ sarb $7, %dil
+ subb %dil, %al
+ movsbl %al,%eax
+ ret
+
+which is nicer. This also happens for int, not just char.
+
+//===---------------------------------------------------------------------===//
+
+
+
More information about the llvm-commits
mailing list