Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=i386-unknown-unknown | FileCheck %s
      3 
      4 define i32 @test1(i32 %X) {
      5 ; CHECK-LABEL: test1:
      6 ; CHECK:       # %bb.0:
      7 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
      8 ; CHECK-NEXT:    movl $-2139062143, %edx # imm = 0x80808081
      9 ; CHECK-NEXT:    movl %ecx, %eax
     10 ; CHECK-NEXT:    imull %edx
     11 ; CHECK-NEXT:    addl %ecx, %edx
     12 ; CHECK-NEXT:    movl %edx, %eax
     13 ; CHECK-NEXT:    shrl $31, %eax
     14 ; CHECK-NEXT:    sarl $7, %edx
     15 ; CHECK-NEXT:    addl %eax, %edx
     16 ; CHECK-NEXT:    movl %edx, %eax
     17 ; CHECK-NEXT:    shll $8, %eax
     18 ; CHECK-NEXT:    subl %eax, %edx
     19 ; CHECK-NEXT:    addl %edx, %ecx
     20 ; CHECK-NEXT:    movl %ecx, %eax
     21 ; CHECK-NEXT:    retl
     22   %tmp1 = srem i32 %X, 255
     23   ret i32 %tmp1
     24 }
     25 
     26 define i32 @test2(i32 %X) {
     27 ; CHECK-LABEL: test2:
     28 ; CHECK:       # %bb.0:
     29 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
     30 ; CHECK-NEXT:    movl %eax, %ecx
     31 ; CHECK-NEXT:    sarl $31, %ecx
     32 ; CHECK-NEXT:    shrl $24, %ecx
     33 ; CHECK-NEXT:    addl %eax, %ecx
     34 ; CHECK-NEXT:    andl $-256, %ecx
     35 ; CHECK-NEXT:    subl %ecx, %eax
     36 ; CHECK-NEXT:    retl
     37   %tmp1 = srem i32 %X, 256
     38   ret i32 %tmp1
     39 }
     40 
     41 define i32 @test3(i32 %X) {
     42 ; CHECK-LABEL: test3:
     43 ; CHECK:       # %bb.0:
     44 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
     45 ; CHECK-NEXT:    movl $-2139062143, %edx # imm = 0x80808081
     46 ; CHECK-NEXT:    movl %ecx, %eax
     47 ; CHECK-NEXT:    mull %edx
     48 ; CHECK-NEXT:    shrl $7, %edx
     49 ; CHECK-NEXT:    movl %edx, %eax
     50 ; CHECK-NEXT:    shll $8, %eax
     51 ; CHECK-NEXT:    subl %eax, %edx
     52 ; CHECK-NEXT:    addl %edx, %ecx
     53 ; CHECK-NEXT:    movl %ecx, %eax
     54 ; CHECK-NEXT:    retl
     55   %tmp1 = urem i32 %X, 255
     56   ret i32 %tmp1
     57 }
     58 
     59 define i32 @test4(i32 %X) {
     60 ; CHECK-LABEL: test4:
     61 ; CHECK:       # %bb.0:
     62 ; CHECK-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
     63 ; CHECK-NEXT:    retl
     64   %tmp1 = urem i32 %X, 256
     65   ret i32 %tmp1
     66 }
     67 
     68 define i32 @test5(i32 %X) nounwind readnone {
     69 ; CHECK-LABEL: test5:
     70 ; CHECK:       # %bb.0: # %entry
     71 ; CHECK-NEXT:    movl $41, %eax
     72 ; CHECK-NEXT:    xorl %edx, %edx
     73 ; CHECK-NEXT:    idivl {{[0-9]+}}(%esp)
     74 ; CHECK-NEXT:    movl %edx, %eax
     75 ; CHECK-NEXT:    retl
     76 entry:
     77   %0 = srem i32 41, %X
     78   ret i32 %0
     79 }
     80 
     81