Skip to content

Commit

Permalink
add a poor division by constant case.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125832 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
lattner committed Feb 18, 2011
1 parent 67982da commit c1e4ce6
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions lib/Target/X86/README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1884,3 +1884,40 @@ _add32carry:
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.

//===---------------------------------------------------------------------===//



0 comments on commit c1e4ce6

Please sign in to comment.