@@ -50,31 +50,18 @@ define i8 @test_i8_smax(i8 %a) nounwind {
50
50
define i8 @test_i8_smin (i8 %a ) nounwind {
51
51
; X64-LABEL: test_i8_smin:
52
52
; X64: # %bb.0:
53
- ; X64-NEXT: xorl %eax, %eax
54
- ; X64-NEXT: testb %dil, %dil
55
- ; X64-NEXT: cmovsl %edi, %eax
56
- ; X64-NEXT: # kill: def $al killed $al killed $eax
53
+ ; X64-NEXT: movl %edi, %eax
54
+ ; X64-NEXT: sarb $7, %al
55
+ ; X64-NEXT: andb %dil, %al
57
56
; X64-NEXT: retq
58
57
;
59
- ; X86-BMI-LABEL: test_i8_smin:
60
- ; X86-BMI: # %bb.0:
61
- ; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
62
- ; X86-BMI-NEXT: xorl %eax, %eax
63
- ; X86-BMI-NEXT: testb %cl, %cl
64
- ; X86-BMI-NEXT: cmovsl %ecx, %eax
65
- ; X86-BMI-NEXT: # kill: def $al killed $al killed $eax
66
- ; X86-BMI-NEXT: retl
67
- ;
68
- ; X86-NOBMI-LABEL: test_i8_smin:
69
- ; X86-NOBMI: # %bb.0:
70
- ; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %eax
71
- ; X86-NOBMI-NEXT: testb %al, %al
72
- ; X86-NOBMI-NEXT: js .LBB1_2
73
- ; X86-NOBMI-NEXT: # %bb.1:
74
- ; X86-NOBMI-NEXT: xorl %eax, %eax
75
- ; X86-NOBMI-NEXT: .LBB1_2:
76
- ; X86-NOBMI-NEXT: # kill: def $al killed $al killed $eax
77
- ; X86-NOBMI-NEXT: retl
58
+ ; X86-LABEL: test_i8_smin:
59
+ ; X86: # %bb.0:
60
+ ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
61
+ ; X86-NEXT: movl %ecx, %eax
62
+ ; X86-NEXT: sarb $7, %al
63
+ ; X86-NEXT: andb %cl, %al
64
+ ; X86-NEXT: retl
78
65
%r = call i8 @llvm.smin.i8 (i8 %a , i8 0 )
79
66
ret i8 %r
80
67
}
@@ -112,33 +99,29 @@ define i16 @test_i16_smax(i16 %a) nounwind {
112
99
}
113
100
114
101
define i16 @test_i16_smin (i16 %a ) nounwind {
102
+ ; CHECK-LABEL: test_i16_smin:
103
+ ; CHECK: # %bb.0:
104
+ ; CHECK-NEXT: movswl %di, %eax
105
+ ; CHECK-NEXT: sarl $15, %eax
106
+ ; CHECK-NEXT: andl %edi, %eax
107
+ ; CHECK-NEXT: # kill: def $ax killed $ax killed $eax
108
+ ; CHECK-NEXT: retq
115
109
; X64-LABEL: test_i16_smin:
116
110
; X64: # %bb.0:
117
- ; X64-NEXT: xorl %eax , %eax
118
- ; X64-NEXT: testw %di , %di
119
- ; X64-NEXT: cmovsl %edi, %eax
111
+ ; X64-NEXT: movswl %di , %eax
112
+ ; X64-NEXT: sarl $15 , %eax
113
+ ; X64-NEXT: andl %edi, %eax
120
114
; X64-NEXT: # kill: def $ax killed $ax killed $eax
121
115
; X64-NEXT: retq
122
116
;
123
- ; X86-BMI-LABEL: test_i16_smin:
124
- ; X86-BMI: # %bb.0:
125
- ; X86-BMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
126
- ; X86-BMI-NEXT: xorl %eax, %eax
127
- ; X86-BMI-NEXT: testw %cx, %cx
128
- ; X86-BMI-NEXT: cmovsl %ecx, %eax
129
- ; X86-BMI-NEXT: # kill: def $ax killed $ax killed $eax
130
- ; X86-BMI-NEXT: retl
131
- ;
132
- ; X86-NOBMI-LABEL: test_i16_smin:
133
- ; X86-NOBMI: # %bb.0:
134
- ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
135
- ; X86-NOBMI-NEXT: testw %ax, %ax
136
- ; X86-NOBMI-NEXT: js .LBB3_2
137
- ; X86-NOBMI-NEXT: # %bb.1:
138
- ; X86-NOBMI-NEXT: xorl %eax, %eax
139
- ; X86-NOBMI-NEXT: .LBB3_2:
140
- ; X86-NOBMI-NEXT: # kill: def $ax killed $ax killed $eax
141
- ; X86-NOBMI-NEXT: retl
117
+ ; X86-LABEL: test_i16_smin:
118
+ ; X86: # %bb.0:
119
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
120
+ ; X86-NEXT: movl %ecx, %eax
121
+ ; X86-NEXT: shrl $15, %eax
122
+ ; X86-NEXT: andl %ecx, %eax
123
+ ; X86-NEXT: # kill: def $ax killed $ax killed $eax
124
+ ; X86-NEXT: retl
142
125
%r = call i16 @llvm.smin.i16 (i16 %a , i16 0 )
143
126
ret i16 %r
144
127
}
0 commit comments