@@ -44,3 +44,44 @@ define i32 @shl24sar25(i32 %a) #0 {
44
44
%2 = ashr exact i32 %1 , 25
45
45
ret i32 %2
46
46
}
47
+
48
+ define void @shl144sar48 (ptr %p ) #0 {
49
+ ; CHECK-LABEL: shl144sar48:
50
+ ; CHECK: # %bb.0:
51
+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
52
+ ; CHECK-NEXT: movswl (%eax), %ecx
53
+ ; CHECK-NEXT: movl %ecx, %edx
54
+ ; CHECK-NEXT: sarl $31, %edx
55
+ ; CHECK-NEXT: shldl $2, %ecx, %edx
56
+ ; CHECK-NEXT: shll $2, %ecx
57
+ ; CHECK-NEXT: movl %ecx, 12(%eax)
58
+ ; CHECK-NEXT: movl %edx, 16(%eax)
59
+ ; CHECK-NEXT: movl $0, 8(%eax)
60
+ ; CHECK-NEXT: movl $0, 4(%eax)
61
+ ; CHECK-NEXT: movl $0, (%eax)
62
+ ; CHECK-NEXT: retl
63
+ %a = load i160 , ptr %p
64
+ %1 = shl i160 %a , 144
65
+ %2 = ashr exact i160 %1 , 46
66
+ store i160 %2 , ptr %p
67
+ ret void
68
+ }
69
+
70
+ define void @shl144sar2 (ptr %p ) #0 {
71
+ ; CHECK-LABEL: shl144sar2:
72
+ ; CHECK: # %bb.0:
73
+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
74
+ ; CHECK-NEXT: movswl (%eax), %ecx
75
+ ; CHECK-NEXT: sarl $31, %ecx
76
+ ; CHECK-NEXT: movl %ecx, 16(%eax)
77
+ ; CHECK-NEXT: movl %ecx, 8(%eax)
78
+ ; CHECK-NEXT: movl %ecx, 12(%eax)
79
+ ; CHECK-NEXT: movl %ecx, 4(%eax)
80
+ ; CHECK-NEXT: movl %ecx, (%eax)
81
+ ; CHECK-NEXT: retl
82
+ %a = load i160 , ptr %p
83
+ %1 = shl i160 %a , 144
84
+ %2 = ashr exact i160 %1 , 2
85
+ store i160 %2 , ptr %p
86
+ ret void
87
+ }
0 commit comments