|
4 | 4 | ; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,+cmov < %s | FileCheck %s --check-prefixes=X86,X86-BMI
|
5 | 5 | ; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=-bmi < %s | FileCheck %s --check-prefixes=X86,X86-NOBMI
|
6 | 6 |
|
| 7 | +declare i8 @llvm.smax.i8(i8, i8) |
| 8 | +declare i8 @llvm.smin.i8(i8, i8) |
| 9 | +declare i16 @llvm.smax.i16(i16, i16) |
| 10 | +declare i16 @llvm.smin.i16(i16, i16) |
7 | 11 | declare i32 @llvm.smax.i32(i32, i32)
|
8 | 12 | declare i32 @llvm.smin.i32(i32, i32)
|
9 | 13 | declare i64 @llvm.smax.i64(i64, i64)
|
10 | 14 | declare i64 @llvm.smin.i64(i64, i64)
|
11 | 15 |
|
| 16 | +define i8 @test_i8_smax(i8 %a) nounwind { |
| 17 | +; X64-LABEL: test_i8_smax: |
| 18 | +; X64: # %bb.0: |
| 19 | +; X64-NEXT: xorl %eax, %eax |
| 20 | +; X64-NEXT: testb %dil, %dil |
| 21 | +; X64-NEXT: cmovgl %edi, %eax |
| 22 | +; X64-NEXT: # kill: def $al killed $al killed $eax |
| 23 | +; X64-NEXT: retq |
| 24 | +; |
| 25 | +; X86-BMI-LABEL: test_i8_smax: |
| 26 | +; X86-BMI: # %bb.0: |
| 27 | +; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx |
| 28 | +; X86-BMI-NEXT: xorl %eax, %eax |
| 29 | +; X86-BMI-NEXT: testb %cl, %cl |
| 30 | +; X86-BMI-NEXT: cmovgl %ecx, %eax |
| 31 | +; X86-BMI-NEXT: # kill: def $al killed $al killed $eax |
| 32 | +; X86-BMI-NEXT: retl |
| 33 | +; |
| 34 | +; X86-NOBMI-LABEL: test_i8_smax: |
| 35 | +; X86-NOBMI: # %bb.0: |
| 36 | +; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %eax |
| 37 | +; X86-NOBMI-NEXT: testb %al, %al |
| 38 | +; X86-NOBMI-NEXT: jg .LBB0_2 |
| 39 | +; X86-NOBMI-NEXT: # %bb.1: |
| 40 | +; X86-NOBMI-NEXT: xorl %eax, %eax |
| 41 | +; X86-NOBMI-NEXT: .LBB0_2: |
| 42 | +; X86-NOBMI-NEXT: # kill: def $al killed $al killed $eax |
| 43 | +; X86-NOBMI-NEXT: retl |
| 44 | + %r = call i8 @llvm.smax.i8(i8 %a, i8 0) |
| 45 | + ret i8 %r |
| 46 | +} |
| 47 | + |
| 48 | +define i8 @test_i8_smin(i8 %a) nounwind { |
| 49 | +; X64-LABEL: test_i8_smin: |
| 50 | +; X64: # %bb.0: |
| 51 | +; X64-NEXT: xorl %eax, %eax |
| 52 | +; X64-NEXT: testb %dil, %dil |
| 53 | +; X64-NEXT: cmovsl %edi, %eax |
| 54 | +; X64-NEXT: # kill: def $al killed $al killed $eax |
| 55 | +; X64-NEXT: retq |
| 56 | +; |
| 57 | +; X86-BMI-LABEL: test_i8_smin: |
| 58 | +; X86-BMI: # %bb.0: |
| 59 | +; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx |
| 60 | +; X86-BMI-NEXT: xorl %eax, %eax |
| 61 | +; X86-BMI-NEXT: testb %cl, %cl |
| 62 | +; X86-BMI-NEXT: cmovsl %ecx, %eax |
| 63 | +; X86-BMI-NEXT: # kill: def $al killed $al killed $eax |
| 64 | +; X86-BMI-NEXT: retl |
| 65 | +; |
| 66 | +; X86-NOBMI-LABEL: test_i8_smin: |
| 67 | +; X86-NOBMI: # %bb.0: |
| 68 | +; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %eax |
| 69 | +; X86-NOBMI-NEXT: testb %al, %al |
| 70 | +; X86-NOBMI-NEXT: js .LBB1_2 |
| 71 | +; X86-NOBMI-NEXT: # %bb.1: |
| 72 | +; X86-NOBMI-NEXT: xorl %eax, %eax |
| 73 | +; X86-NOBMI-NEXT: .LBB1_2: |
| 74 | +; X86-NOBMI-NEXT: # kill: def $al killed $al killed $eax |
| 75 | +; X86-NOBMI-NEXT: retl |
| 76 | + %r = call i8 @llvm.smin.i8(i8 %a, i8 0) |
| 77 | + ret i8 %r |
| 78 | +} |
| 79 | + |
| 80 | +define i16 @test_i16_smax(i16 %a) nounwind { |
| 81 | +; X64-LABEL: test_i16_smax: |
| 82 | +; X64: # %bb.0: |
| 83 | +; X64-NEXT: xorl %eax, %eax |
| 84 | +; X64-NEXT: testw %di, %di |
| 85 | +; X64-NEXT: cmovgl %edi, %eax |
| 86 | +; X64-NEXT: # kill: def $ax killed $ax killed $eax |
| 87 | +; X64-NEXT: retq |
| 88 | +; |
| 89 | +; X86-BMI-LABEL: test_i16_smax: |
| 90 | +; X86-BMI: # %bb.0: |
| 91 | +; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx |
| 92 | +; X86-BMI-NEXT: xorl %eax, %eax |
| 93 | +; X86-BMI-NEXT: testw %cx, %cx |
| 94 | +; X86-BMI-NEXT: cmovgl %ecx, %eax |
| 95 | +; X86-BMI-NEXT: # kill: def $ax killed $ax killed $eax |
| 96 | +; X86-BMI-NEXT: retl |
| 97 | +; |
| 98 | +; X86-NOBMI-LABEL: test_i16_smax: |
| 99 | +; X86-NOBMI: # %bb.0: |
| 100 | +; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 101 | +; X86-NOBMI-NEXT: testw %ax, %ax |
| 102 | +; X86-NOBMI-NEXT: jg .LBB2_2 |
| 103 | +; X86-NOBMI-NEXT: # %bb.1: |
| 104 | +; X86-NOBMI-NEXT: xorl %eax, %eax |
| 105 | +; X86-NOBMI-NEXT: .LBB2_2: |
| 106 | +; X86-NOBMI-NEXT: # kill: def $ax killed $ax killed $eax |
| 107 | +; X86-NOBMI-NEXT: retl |
| 108 | + %r = call i16 @llvm.smax.i16(i16 %a, i16 0) |
| 109 | + ret i16 %r |
| 110 | +} |
| 111 | + |
| 112 | +define i16 @test_i16_smin(i16 %a) nounwind { |
| 113 | +; X64-LABEL: test_i16_smin: |
| 114 | +; X64: # %bb.0: |
| 115 | +; X64-NEXT: xorl %eax, %eax |
| 116 | +; X64-NEXT: testw %di, %di |
| 117 | +; X64-NEXT: cmovsl %edi, %eax |
| 118 | +; X64-NEXT: # kill: def $ax killed $ax killed $eax |
| 119 | +; X64-NEXT: retq |
| 120 | +; |
| 121 | +; X86-BMI-LABEL: test_i16_smin: |
| 122 | +; X86-BMI: # %bb.0: |
| 123 | +; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx |
| 124 | +; X86-BMI-NEXT: xorl %eax, %eax |
| 125 | +; X86-BMI-NEXT: testw %cx, %cx |
| 126 | +; X86-BMI-NEXT: cmovsl %ecx, %eax |
| 127 | +; X86-BMI-NEXT: # kill: def $ax killed $ax killed $eax |
| 128 | +; X86-BMI-NEXT: retl |
| 129 | +; |
| 130 | +; X86-NOBMI-LABEL: test_i16_smin: |
| 131 | +; X86-NOBMI: # %bb.0: |
| 132 | +; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax |
| 133 | +; X86-NOBMI-NEXT: testw %ax, %ax |
| 134 | +; X86-NOBMI-NEXT: js .LBB3_2 |
| 135 | +; X86-NOBMI-NEXT: # %bb.1: |
| 136 | +; X86-NOBMI-NEXT: xorl %eax, %eax |
| 137 | +; X86-NOBMI-NEXT: .LBB3_2: |
| 138 | +; X86-NOBMI-NEXT: # kill: def $ax killed $ax killed $eax |
| 139 | +; X86-NOBMI-NEXT: retl |
| 140 | + %r = call i16 @llvm.smin.i16(i16 %a, i16 0) |
| 141 | + ret i16 %r |
| 142 | +} |
| 143 | + |
12 | 144 | define i32 @test_i32_smax(i32 %a) nounwind {
|
13 | 145 | ; X64-BMI-LABEL: test_i32_smax:
|
14 | 146 | ; X64-BMI: # %bb.0:
|
@@ -36,10 +168,10 @@ define i32 @test_i32_smax(i32 %a) nounwind {
|
36 | 168 | ; X86-NOBMI: # %bb.0:
|
37 | 169 | ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
|
38 | 170 | ; X86-NOBMI-NEXT: testl %eax, %eax
|
39 |
| -; X86-NOBMI-NEXT: jg .LBB0_2 |
| 171 | +; X86-NOBMI-NEXT: jg .LBB4_2 |
40 | 172 | ; X86-NOBMI-NEXT: # %bb.1:
|
41 | 173 | ; X86-NOBMI-NEXT: xorl %eax, %eax
|
42 |
| -; X86-NOBMI-NEXT: .LBB0_2: |
| 174 | +; X86-NOBMI-NEXT: .LBB4_2: |
43 | 175 | ; X86-NOBMI-NEXT: retl
|
44 | 176 | %r = call i32 @llvm.smax.i32(i32 %a, i32 0)
|
45 | 177 | ret i32 %r
|
@@ -93,15 +225,15 @@ define i64 @test_i64_smax(i64 %a) nounwind {
|
93 | 225 | ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %edx
|
94 | 226 | ; X86-NOBMI-NEXT: testl %edx, %edx
|
95 | 227 | ; X86-NOBMI-NEXT: movl $0, %eax
|
96 |
| -; X86-NOBMI-NEXT: jns .LBB2_1 |
| 228 | +; X86-NOBMI-NEXT: jns .LBB6_1 |
97 | 229 | ; X86-NOBMI-NEXT: # %bb.2:
|
98 |
| -; X86-NOBMI-NEXT: jle .LBB2_3 |
99 |
| -; X86-NOBMI-NEXT: .LBB2_4: |
| 230 | +; X86-NOBMI-NEXT: jle .LBB6_3 |
| 231 | +; X86-NOBMI-NEXT: .LBB6_4: |
100 | 232 | ; X86-NOBMI-NEXT: retl
|
101 |
| -; X86-NOBMI-NEXT: .LBB2_1: |
| 233 | +; X86-NOBMI-NEXT: .LBB6_1: |
102 | 234 | ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
|
103 |
| -; X86-NOBMI-NEXT: jg .LBB2_4 |
104 |
| -; X86-NOBMI-NEXT: .LBB2_3: |
| 235 | +; X86-NOBMI-NEXT: jg .LBB6_4 |
| 236 | +; X86-NOBMI-NEXT: .LBB6_3: |
105 | 237 | ; X86-NOBMI-NEXT: xorl %edx, %edx
|
106 | 238 | ; X86-NOBMI-NEXT: retl
|
107 | 239 | %r = call i64 @llvm.smax.i64(i64 %a, i64 0)
|
|
0 commit comments