xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sar_fold.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine i32 @shl16sar15(i32 %a) #0 {
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl16sar15:
5*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movswl {{[0-9]+}}(%esp), %eax
7*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, 16
8*9880d681SAndroid Build Coastguard Worker  %2 = ashr exact i32 %1, 15
9*9880d681SAndroid Build Coastguard Worker  ret i32 %2
10*9880d681SAndroid Build Coastguard Worker}
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine i32 @shl16sar17(i32 %a) #0 {
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl16sar17:
14*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movswl {{[0-9]+}}(%esp), %eax
16*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, 16
17*9880d681SAndroid Build Coastguard Worker  %2 = ashr exact i32 %1, 17
18*9880d681SAndroid Build Coastguard Worker  ret i32 %2
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine i32 @shl24sar23(i32 %a) #0 {
22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl24sar23:
23*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movsbl {{[0-9]+}}(%esp), %eax
25*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, 24
26*9880d681SAndroid Build Coastguard Worker  %2 = ashr exact i32 %1, 23
27*9880d681SAndroid Build Coastguard Worker  ret i32 %2
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine i32 @shl24sar25(i32 %a) #0 {
31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: shl24sar25:
32*9880d681SAndroid Build Coastguard Worker; CHECK:       # BB#0:
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movsbl {{[0-9]+}}(%esp), %eax
34*9880d681SAndroid Build Coastguard Worker  %1 = shl i32 %a, 24
35*9880d681SAndroid Build Coastguard Worker  %2 = ashr exact i32 %1, 25
36*9880d681SAndroid Build Coastguard Worker  ret i32 %2
37*9880d681SAndroid Build Coastguard Worker}
38