1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2; RUN: opt -passes=early-cse -earlycse-debug-hash -S < %s | FileCheck %s 3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 5target triple = "aarch64" 6 7; This test checks that SimplifyInstruction does not blow up in the face of 8; a scalable shufflevector. vscale is a constant value known only at runtime. 9; Therefore, it is not possible to know the concrete value of, or the length 10; of the mask at compile time. Simplifications that depend on the value 11; of the mask cannot be performed. 12 13; Given the fact that the value of the mask is unknown at compile time for 14; scalable vectors, very few simplifications will be done. Here, we want to 15; see that the instruction can be passed to SimplifyInstruction and not crash 16; the compiler. It happens to be the case that this will be the result. 17 18 19define <vscale x 8 x i1> @vscale_version() { 20; CHECK-LABEL: define <vscale x 8 x i1> @vscale_version() { 21; CHECK-NEXT: ret <vscale x 8 x i1> splat (i1 true) 22; 23 %splatter = insertelement <vscale x 8 x i1> undef, i1 true, i32 0 24 %foo = shufflevector <vscale x 8 x i1> %splatter, <vscale x 8 x i1> undef, <vscale x 8 x i32> zeroinitializer 25 ret <vscale x 8 x i1> %foo 26} 27 28; The non-scalable version should be optimized as normal. 29 30define <8 x i1> @fixed_length_version() { 31; CHECK-LABEL: define <8 x i1> @fixed_length_version() { 32; CHECK-NEXT: ret <8 x i1> splat (i1 true) 33; 34 %splatter = insertelement <8 x i1> undef, i1 true, i32 0 35 %foo = shufflevector <8 x i1> %splatter, <8 x i1> undef, <8 x i32> zeroinitializer 36 ret <8 x i1> %foo 37} 38 39