1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=loop-vectorize -S -mtriple=x86_64-- -o - %s | FileCheck %s 3 4; Testcase that verify that we don't get a faulty bitcast that cast between 5; different sizes. 6 7%rec8 = type { i16 } 8 9@a = global [1 x %rec8] zeroinitializer 10@b = global [2 x ptr] zeroinitializer 11 12 13define void @f1() { 14; CHECK-LABEL: @f1( 15; CHECK-NEXT: bb1: 16; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]] 17; CHECK: vector.ph: 18; CHECK-NEXT: br label [[VECTOR_BODY:%.*]] 19; CHECK: vector.body: 20; CHECK-NEXT: [[TMP0:%.*]] = sext i16 0 to i64 21; CHECK-NEXT: [[TMP1:%.*]] = getelementptr [2 x ptr], ptr @b, i16 0, i64 [[TMP0]] 22; CHECK-NEXT: [[TMP2:%.*]] = getelementptr ptr, ptr [[TMP1]], i32 0 23; CHECK-NEXT: store <2 x ptr> <ptr @a, ptr @a>, ptr [[TMP2]], align 8 24; CHECK-NEXT: br label [[MIDDLE_BLOCK:%.*]] 25; CHECK: middle.block: 26; CHECK-NEXT: br i1 true, label [[BB3:%.*]], label [[SCALAR_PH]] 27; CHECK: scalar.ph: 28; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i16 [ 2, [[MIDDLE_BLOCK]] ], [ 0, [[BB1:%.*]] ] 29; CHECK-NEXT: br label [[BB2:%.*]] 30; CHECK: bb2: 31; CHECK-NEXT: [[C_1_0:%.*]] = phi i16 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[_TMP9:%.*]], [[BB2]] ] 32; CHECK-NEXT: [[_TMP1:%.*]] = zext i16 0 to i64 33; CHECK-NEXT: [[_TMP2:%.*]] = getelementptr [1 x %rec8], ptr @a, i16 0, i64 [[_TMP1]] 34; CHECK-NEXT: [[_TMP6:%.*]] = sext i16 [[C_1_0]] to i64 35; CHECK-NEXT: [[_TMP7:%.*]] = getelementptr [2 x ptr], ptr @b, i16 0, i64 [[_TMP6]] 36; CHECK-NEXT: store ptr [[_TMP2]], ptr [[_TMP7]], align 8 37; CHECK-NEXT: [[_TMP9]] = add nsw i16 [[C_1_0]], 1 38; CHECK-NEXT: [[_TMP11:%.*]] = icmp slt i16 [[_TMP9]], 2 39; CHECK-NEXT: br i1 [[_TMP11]], label [[BB2]], label [[BB3]], !llvm.loop [[LOOP0:![0-9]+]] 40; CHECK: bb3: 41; CHECK-NEXT: ret void 42; 43 44bb1: 45 br label %bb2 46 47bb2: 48 %c.1.0 = phi i16 [ 0, %bb1 ], [ %_tmp9, %bb2 ] 49 %_tmp1 = zext i16 0 to i64 50 %_tmp2 = getelementptr [1 x %rec8], ptr @a, i16 0, i64 %_tmp1 51 %_tmp6 = sext i16 %c.1.0 to i64 52 %_tmp7 = getelementptr [2 x ptr], ptr @b, i16 0, i64 %_tmp6 53 store ptr %_tmp2, ptr %_tmp7 54 %_tmp9 = add nsw i16 %c.1.0, 1 55 %_tmp11 = icmp slt i16 %_tmp9, 2 56 br i1 %_tmp11, label %bb2, label %bb3 57 58bb3: 59 ret void 60} 61