[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Transforms / InstCombine / vscale_sext_and_zext.ll
blob26fa24cec3b9aa988faadc535fb2e2e4aabee2d4
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -instcombine -S | FileCheck %s
5 ; Sign-extend
8 define i32 @vscale_SExt_i8toi32() vscale_range(0, 127) {
9 ; CHECK-LABEL: @vscale_SExt_i8toi32(
10 ; CHECK-NEXT:  entry:
11 ; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.vscale.i32()
12 ; CHECK-NEXT:    ret i32 [[TMP0]]
14 entry:
15   %0 = call i8 @llvm.vscale.i8()
16   %1 = sext i8 %0 to i32
17   ret i32 %1
20 define i32 @vscale_SExt_i8toi32_poison() vscale_range(0, 128) {
21 ; CHECK-LABEL: @vscale_SExt_i8toi32_poison(
22 ; CHECK-NEXT:  entry:
23 ; CHECK-NEXT:    [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
24 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[TMP0]] to i32
25 ; CHECK-NEXT:    ret i32 [[TMP1]]
27   entry:
28   %0 = call i8 @llvm.vscale.i8()
29   %1 = sext i8 %0 to i32
30   ret i32 %1
34 ; Zero-extend
37 define i32 @vscale_ZExt_i8toi32() vscale_range(0, 128) {
38 ; CHECK-LABEL: @vscale_ZExt_i8toi32(
39 ; CHECK-NEXT:  entry:
40 ; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.vscale.i32()
41 ; CHECK-NEXT:    ret i32 [[TMP0]]
43 entry:
44   %0 = call i8 @llvm.vscale.i8()
45   %1 = zext i8 %0 to i32
46   ret i32 %1
49 define i32 @vscale_ZExt_i8toi32_poison() vscale_range(0, 256) {
50 ; CHECK-LABEL: @vscale_ZExt_i8toi32_poison(
51 ; CHECK-NEXT:  entry:
52 ; CHECK-NEXT:    [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
53 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i8 [[TMP0]] to i32
54 ; CHECK-NEXT:    ret i32 [[TMP1]]
56   entry:
57   %0 = call i8 @llvm.vscale.i8()
58   %1 = zext i8 %0 to i32
59   ret i32 %1
63 ; No vscale_range attribute
66 define i32 @vscale_ZExt_i8toi32_unknown() {
67 ; CHECK-LABEL: @vscale_ZExt_i8toi32_unknown(
68 ; CHECK-NEXT:  entry:
69 ; CHECK-NEXT:    [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
70 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i8 [[TMP0]] to i32
71 ; CHECK-NEXT:    ret i32 [[TMP1]]
73   entry:
74   %0 = call i8 @llvm.vscale.i8()
75   %1 = zext i8 %0 to i32
76   ret i32 %1
80 ; unbounded vscale_range maximum (0)
83 define i32 @vscale_SExt_i8toi32_unbounded() vscale_range(0, 0) {
84 ; CHECK-LABEL: @vscale_SExt_i8toi32_unbounded(
85 ; CHECK-NEXT:  entry:
86 ; CHECK-NEXT:    [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
87 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[TMP0]] to i32
88 ; CHECK-NEXT:    ret i32 [[TMP1]]
90   entry:
91   %0 = call i8 @llvm.vscale.i8()
92   %1 = sext i8 %0 to i32
93   ret i32 %1
96 define i32 @vscale_ZExt_i8toi32_unbounded() vscale_range(0, 0) {
97 ; CHECK-LABEL: @vscale_ZExt_i8toi32_unbounded(
98 ; CHECK-NEXT:  entry:
99 ; CHECK-NEXT:    [[TMP0:%.*]] = call i8 @llvm.vscale.i8()
100 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i8 [[TMP0]] to i32
101 ; CHECK-NEXT:    ret i32 [[TMP1]]
103   entry:
104   %0 = call i8 @llvm.vscale.i8()
105   %1 = zext i8 %0 to i32
106   ret i32 %1
109 declare i8  @llvm.vscale.i8()