1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2; RUN: opt < %s -O3 -S -mtriple=x86_64-- -mcpu=x86-64 | FileCheck %s 3; RUN: opt < %s -O3 -S -mtriple=x86_64-- -mcpu=x86-64-v2 | FileCheck %s 4; RUN: opt < %s -O3 -S -mtriple=x86_64-- -mcpu=x86-64-v3 | FileCheck %s 5; RUN: opt < %s -O3 -S -mtriple=x86_64-- -mcpu=x86-64-v4 | FileCheck %s 6 7define <2 x i64> @PR61061(<2 x i64> noundef %vect) { 8; CHECK-LABEL: define <2 x i64> @PR61061 9; CHECK-SAME: (<2 x i64> noundef [[VECT:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { 10; CHECK-NEXT: [[BC0:%.*]] = bitcast <2 x i64> [[VECT]] to <16 x i8> 11; CHECK-NEXT: [[PTR_SROA_0_15_VEC_INSERT:%.*]] = shufflevector <16 x i8> [[BC0]], <16 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3> 12; CHECK-NEXT: [[TMP1:%.*]] = bitcast <16 x i8> [[PTR_SROA_0_15_VEC_INSERT]] to <2 x i64> 13; CHECK-NEXT: ret <2 x i64> [[TMP1]] 14; 15 %ptr = alloca <2 x i64>, align 16 16 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %ptr) 17 %bc0 = bitcast <2 x i64> %vect to <16 x i8> 18 %bc1 = bitcast <2 x i64> %vect to <16 x i8> 19 %bc2 = bitcast <2 x i64> %vect to <16 x i8> 20 %bc3 = bitcast <2 x i64> %vect to <16 x i8> 21 %bc4 = bitcast <2 x i64> %vect to <16 x i8> 22 %bc5 = bitcast <2 x i64> %vect to <16 x i8> 23 %bc6 = bitcast <2 x i64> %vect to <16 x i8> 24 %bc7 = bitcast <2 x i64> %vect to <16 x i8> 25 %elt0 = extractelement <16 x i8> %bc0, i64 0 26 %elt1 = extractelement <16 x i8> %bc1, i64 1 27 %elt2 = extractelement <16 x i8> %bc2, i64 2 28 %elt3 = extractelement <16 x i8> %bc3, i64 3 29 %elt4 = extractelement <16 x i8> %bc4, i64 4 30 %elt5 = extractelement <16 x i8> %bc5, i64 5 31 %elt6 = extractelement <16 x i8> %bc6, i64 6 32 %elt7 = extractelement <16 x i8> %bc7, i64 7 33 %ptr1 = getelementptr inbounds i8, ptr %ptr, i64 1 34 %ptr2 = getelementptr inbounds i8, ptr %ptr, i64 2 35 %ptr3 = getelementptr inbounds i8, ptr %ptr, i64 3 36 %ptr4 = getelementptr inbounds i8, ptr %ptr, i64 4 37 %ptr5 = getelementptr inbounds i8, ptr %ptr, i64 5 38 %ptr6 = getelementptr inbounds i8, ptr %ptr, i64 6 39 %ptr7 = getelementptr inbounds i8, ptr %ptr, i64 7 40 %ptr8 = getelementptr inbounds i8, ptr %ptr, i64 8 41 %ptr9 = getelementptr inbounds i8, ptr %ptr, i64 9 42 %ptr10 = getelementptr inbounds i8, ptr %ptr, i64 10 43 %ptr11 = getelementptr inbounds i8, ptr %ptr, i64 11 44 %ptr12 = getelementptr inbounds i8, ptr %ptr, i64 12 45 %ptr13 = getelementptr inbounds i8, ptr %ptr, i64 13 46 %ptr14 = getelementptr inbounds i8, ptr %ptr, i64 14 47 %ptr15 = getelementptr inbounds i8, ptr %ptr, i64 15 48 store i8 %elt0, ptr %ptr, align 16 49 store i8 %elt1, ptr %ptr1, align 1 50 store i8 %elt2, ptr %ptr2, align 2 51 store i8 %elt3, ptr %ptr3, align 1 52 store i8 %elt0, ptr %ptr4, align 4 53 store i8 %elt1, ptr %ptr5, align 1 54 store i8 %elt2, ptr %ptr6, align 2 55 store i8 %elt3, ptr %ptr7, align 1 56 store i8 %elt4, ptr %ptr8, align 8 57 store i8 %elt5, ptr %ptr9, align 1 58 store i8 %elt6, ptr %ptr10, align 2 59 store i8 %elt7, ptr %ptr11, align 1 60 store i8 %elt0, ptr %ptr12, align 4 61 store i8 %elt1, ptr %ptr13, align 1 62 store i8 %elt2, ptr %ptr14, align 2 63 store i8 %elt3, ptr %ptr15, align 1 64 %base = load <2 x i64>, ptr %ptr, align 16 65 call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %ptr) 66 ret <2 x i64> %base 67} 68declare void @llvm.lifetime.start.p0(i64, ptr) 69declare void @llvm.lifetime.end.p0(i64, ptr) 70