1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2
2
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
3
4
+ target datalayout = "n8:16:32:64"
5
+
4
6
define i32 @trunc_shl_zext_32 (i32 %a ) {
5
7
; CHECK-LABEL: define i32 @trunc_shl_zext_32
6
8
; CHECK-SAME: (i32 [[A:%.*]]) {
7
- ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i32 [[A]] to i16
8
- ; CHECK-NEXT: [[SHL:%.*]] = shl i16 [[TRUNC]], 4
9
- ; CHECK-NEXT: [[EXT:%.*]] = zext i16 [[SHL]] to i32
9
+ ; CHECK-NEXT: [[SHL:%.*]] = shl i32 [[A]], 4
10
+ ; CHECK-NEXT: [[EXT:%.*]] = and i32 [[SHL]], 65520
10
11
; CHECK-NEXT: ret i32 [[EXT]]
11
12
;
12
13
%trunc = trunc i32 %a to i16
@@ -18,9 +19,8 @@ define i32 @trunc_shl_zext_32(i32 %a) {
18
19
define i64 @trunc_shl_zext_64 (i64 %a ) {
19
20
; CHECK-LABEL: define i64 @trunc_shl_zext_64
20
21
; CHECK-SAME: (i64 [[A:%.*]]) {
21
- ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i64 [[A]] to i8
22
- ; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[TRUNC]], 7
23
- ; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[SHL]] to i64
22
+ ; CHECK-NEXT: [[SHL:%.*]] = shl i64 [[A]], 7
23
+ ; CHECK-NEXT: [[EXT:%.*]] = and i64 [[SHL]], 128
24
24
; CHECK-NEXT: ret i64 [[EXT]]
25
25
;
26
26
%trunc = trunc i64 %a to i8
0 commit comments