[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / fast-isel-divrem.ll
blob45b9d6a0776db803ee0bd79b0e87a5fa872be4b2
1 ; RUN: llc -mtriple=x86_64-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
2 ; RUN: llc -mtriple=i686-none-linux -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s | FileCheck %s
4 define i8 @test_sdiv8(i8 %dividend, i8 %divisor) nounwind {
5 entry:
6   %result = sdiv i8 %dividend, %divisor
7   ret i8 %result
10 ; CHECK-LABEL: test_sdiv8:
11 ; CHECK: movsbl
12 ; CHECK: idivb
14 define i8 @test_srem8(i8 %dividend, i8 %divisor) nounwind {
15 entry:
16   %result = srem i8 %dividend, %divisor
17   ret i8 %result
20 ; CHECK-LABEL: test_srem8:
21 ; CHECK: movsbl
22 ; CHECK: idivb
24 define i8 @test_udiv8(i8 %dividend, i8 %divisor) nounwind {
25 entry:
26   %result = udiv i8 %dividend, %divisor
27   ret i8 %result
30 ; CHECK-LABEL: test_udiv8:
31 ; CHECK: movzbl
32 ; CHECK: divb
34 define i8 @test_urem8(i8 %dividend, i8 %divisor) nounwind {
35 entry:
36   %result = urem i8 %dividend, %divisor
37   ret i8 %result
40 ; CHECK-LABEL: test_urem8:
41 ; CHECK: movzbl
42 ; CHECK: divb
44 define i16 @test_sdiv16(i16 %dividend, i16 %divisor) nounwind {
45 entry:
46   %result = sdiv i16 %dividend, %divisor
47   ret i16 %result
50 ; CHECK-LABEL: test_sdiv16:
51 ; CHECK: cwtd
52 ; CHECK: idivw
54 define i16 @test_srem16(i16 %dividend, i16 %divisor) nounwind {
55 entry:
56   %result = srem i16 %dividend, %divisor
57   ret i16 %result
60 ; CHECK-LABEL: test_srem16:
61 ; CHECK: cwtd
62 ; CHECK: idivw
64 define i16 @test_udiv16(i16 %dividend, i16 %divisor) nounwind {
65 entry:
66   %result = udiv i16 %dividend, %divisor
67   ret i16 %result
70 ; CHECK-LABEL: test_udiv16:
71 ; CHECK: xorl
72 ; CHECK: divw
74 define i16 @test_urem16(i16 %dividend, i16 %divisor) nounwind {
75 entry:
76   %result = urem i16 %dividend, %divisor
77   ret i16 %result
80 ; CHECK-LABEL: test_urem16:
81 ; CHECK: xorl
82 ; CHECK: divw
84 define i32 @test_sdiv32(i32 %dividend, i32 %divisor) nounwind {
85 entry:
86   %result = sdiv i32 %dividend, %divisor
87   ret i32 %result
90 ; CHECK-LABEL: test_sdiv32:
91 ; CHECK: cltd
92 ; CHECK: idivl
94 define i32 @test_srem32(i32 %dividend, i32 %divisor) nounwind {
95 entry:
96   %result = srem i32 %dividend, %divisor
97   ret i32 %result
100 ; CHECK-LABEL: test_srem32:
101 ; CHECK: cltd
102 ; CHECK: idivl
104 define i32 @test_udiv32(i32 %dividend, i32 %divisor) nounwind {
105 entry:
106   %result = udiv i32 %dividend, %divisor
107   ret i32 %result
110 ; CHECK-LABEL: test_udiv32:
111 ; CHECK: xorl
112 ; CHECK: divl
114 define i32 @test_urem32(i32 %dividend, i32 %divisor) nounwind {
115 entry:
116   %result = urem i32 %dividend, %divisor
117   ret i32 %result
120 ; CHECK-LABEL: test_urem32:
121 ; CHECK: xorl
122 ; CHECK: divl