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