Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_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 %edx, %eax
     19 ; CHECK-NEXT:    subl %eax, %ecx
     20 ; CHECK-NEXT:    movl %ecx, %eax
     21 ; CHECK-NEXT:    retl
     22 ;
     23   %tmp1 = srem i32 %X, 255
     24   ret i32 %tmp1
     25 }
     26 
     27 define i32 @test2(i32 %X) {
     28 ; CHECK-LABEL: test2:
     29 ; CHECK:       # BB#0:
     30 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
     31 ; CHECK-NEXT:    movl %eax, %ecx
     32 ; CHECK-NEXT:    sarl $31, %ecx
     33 ; CHECK-NEXT:    shrl $24, %ecx
     34 ; CHECK-NEXT:    addl %eax, %ecx
     35 ; CHECK-NEXT:    andl $-256, %ecx
     36 ; CHECK-NEXT:    subl %ecx, %eax
     37 ; CHECK-NEXT:    retl
     38 ;
     39   %tmp1 = srem i32 %X, 256
     40   ret i32 %tmp1
     41 }
     42 
     43 define i32 @test3(i32 %X) {
     44 ; CHECK-LABEL: test3:
     45 ; CHECK:       # BB#0:
     46 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %ecx
     47 ; CHECK-NEXT:    movl $-2139062143, %edx # imm = 0x80808081
     48 ; CHECK-NEXT:    movl %ecx, %eax
     49 ; CHECK-NEXT:    mull %edx
     50 ; CHECK-NEXT:    shrl $7, %edx
     51 ; CHECK-NEXT:    movl %edx, %eax
     52 ; CHECK-NEXT:    shll $8, %eax
     53 ; CHECK-NEXT:    subl %edx, %eax
     54 ; CHECK-NEXT:    subl %eax, %ecx
     55 ; CHECK-NEXT:    movl %ecx, %eax
     56 ; CHECK-NEXT:    retl
     57 ;
     58   %tmp1 = urem i32 %X, 255
     59   ret i32 %tmp1
     60 }
     61 
     62 define i32 @test4(i32 %X) {
     63 ; CHECK-LABEL: test4:
     64 ; CHECK:       # BB#0:
     65 ; CHECK-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
     66 ; CHECK-NEXT:    retl
     67 ;
     68   %tmp1 = urem i32 %X, 256
     69   ret i32 %tmp1
     70 }
     71 
     72 define i32 @test5(i32 %X) nounwind readnone {
     73 ; CHECK-LABEL: test5:
     74 ; CHECK:       # BB#0: # %entry
     75 ; CHECK-NEXT:    movl $41, %eax
     76 ; CHECK-NEXT:    xorl %edx, %edx
     77 ; CHECK-NEXT:    idivl {{[0-9]+}}(%esp)
     78 ; CHECK-NEXT:    movl %edx, %eax
     79 ; CHECK-NEXT:    retl
     80 ;
     81 entry:
     82   %0 = srem i32 41, %X
     83   ret i32 %0
     84 }
     85