110 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4;5; Sign-extend6;7 8define i32 @vscale_SExt_i8toi32() vscale_range(1, 64) {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]]13;14entry:15 %0 = call i8 @llvm.vscale.i8()16 %1 = sext i8 %0 to i3217 ret i32 %118}19 20define i32 @vscale_SExt_i8toi32_poison() vscale_range(1, 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 i3225; CHECK-NEXT: ret i32 [[TMP1]]26;27 entry:28 %0 = call i8 @llvm.vscale.i8()29 %1 = sext i8 %0 to i3230 ret i32 %131}32 33;34; Zero-extend35;36 37define i32 @vscale_ZExt_i8toi32() vscale_range(1, 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]]42;43entry:44 %0 = call i8 @llvm.vscale.i8()45 %1 = zext i8 %0 to i3246 ret i32 %147}48 49define i32 @vscale_ZExt_i8toi32_poison() vscale_range(1, 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 i3254; CHECK-NEXT: ret i32 [[TMP1]]55;56 entry:57 %0 = call i8 @llvm.vscale.i8()58 %1 = zext i8 %0 to i3259 ret i32 %160}61 62;63; No vscale_range attribute64;65 66define 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 i3271; CHECK-NEXT: ret i32 [[TMP1]]72;73 entry:74 %0 = call i8 @llvm.vscale.i8()75 %1 = zext i8 %0 to i3276 ret i32 %177}78 79;80; unbounded vscale_range maximum (0)81;82 83define i32 @vscale_SExt_i8toi32_unbounded() vscale_range(1, 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 i3288; CHECK-NEXT: ret i32 [[TMP1]]89;90 entry:91 %0 = call i8 @llvm.vscale.i8()92 %1 = sext i8 %0 to i3293 ret i32 %194}95 96define i32 @vscale_ZExt_i8toi32_unbounded() vscale_range(1, 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 i32101; CHECK-NEXT: ret i32 [[TMP1]]102;103 entry:104 %0 = call i8 @llvm.vscale.i8()105 %1 = zext i8 %0 to i32106 ret i32 %1107}108 109declare i8 @llvm.vscale.i8()110