105f986e1SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 205f986e1SFlorian Hahn; RUN: opt -p loop-vectorize -force-vector-width=2 -force-vector-interleave=1 -S %s | FileCheck --check-prefixes=IC1 %s 305f986e1SFlorian Hahn; RUN: opt -p loop-vectorize -force-vector-width=2 -force-vector-interleave=2 -S %s | FileCheck --check-prefixes=IC2 %s 405f986e1SFlorian Hahn 505f986e1SFlorian Hahndefine void @switch4_default_common_dest_with_case(ptr %start, ptr %end) { 605f986e1SFlorian Hahn; IC1-LABEL: define void @switch4_default_common_dest_with_case( 705f986e1SFlorian Hahn; IC1-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { 805f986e1SFlorian Hahn; IC1-NEXT: [[ENTRY:.*]]: 9f0df4fbdSFlorian Hahn; IC1-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 10f0df4fbdSFlorian Hahn; IC1-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 11f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] 12f0df4fbdSFlorian Hahn; IC1-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 2 13f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] 14f0df4fbdSFlorian Hahn; IC1: [[VECTOR_PH]]: 15f0df4fbdSFlorian Hahn; IC1-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP0]], 2 16f0df4fbdSFlorian Hahn; IC1-NEXT: [[N_VEC:%.*]] = sub i64 [[TMP0]], [[N_MOD_VF]] 17f0df4fbdSFlorian Hahn; IC1-NEXT: [[IND_END:%.*]] = getelementptr i8, ptr [[START]], i64 [[N_VEC]] 18f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[VECTOR_BODY:.*]] 19f0df4fbdSFlorian Hahn; IC1: [[VECTOR_BODY]]: 20f0df4fbdSFlorian Hahn; IC1-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE13:.*]] ] 21f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP1:%.*]] = add i64 [[INDEX]], 0 22f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP2:%.*]] = add i64 [[INDEX]], 1 23f0df4fbdSFlorian Hahn; IC1-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP1]] 24f0df4fbdSFlorian Hahn; IC1-NEXT: [[NEXT_GEP3:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP2]] 25f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i32 0 26f0df4fbdSFlorian Hahn; IC1-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i8>, ptr [[TMP3]], align 1 27*38fffa63SPaul Walker; IC1-NEXT: [[TMP7:%.*]] = icmp eq <2 x i8> [[WIDE_LOAD]], splat (i8 -12) 28*38fffa63SPaul Walker; IC1-NEXT: [[TMP4:%.*]] = icmp eq <2 x i8> [[WIDE_LOAD]], splat (i8 13) 29f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP11:%.*]] = or <2 x i1> [[TMP7]], [[TMP4]] 30*38fffa63SPaul Walker; IC1-NEXT: [[TMP10:%.*]] = xor <2 x i1> [[TMP11]], splat (i1 true) 31f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP5:%.*]] = extractelement <2 x i1> [[TMP4]], i32 0 32f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP5]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] 33f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_IF]]: 34f0df4fbdSFlorian Hahn; IC1-NEXT: store i8 0, ptr [[NEXT_GEP]], align 1 35f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[PRED_STORE_CONTINUE]] 36f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_CONTINUE]]: 37f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP6:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1 38f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP6]], label %[[PRED_STORE_IF4:.*]], label %[[PRED_STORE_CONTINUE5:.*]] 39f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_IF4]]: 40f0df4fbdSFlorian Hahn; IC1-NEXT: store i8 0, ptr [[NEXT_GEP3]], align 1 41f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[PRED_STORE_CONTINUE5]] 42f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_CONTINUE5]]: 43f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP8:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0 44f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP8]], label %[[PRED_STORE_IF6:.*]], label %[[PRED_STORE_CONTINUE7:.*]] 45f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_IF6]]: 46f0df4fbdSFlorian Hahn; IC1-NEXT: store i8 42, ptr [[NEXT_GEP]], align 1 47f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[PRED_STORE_CONTINUE7]] 48f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_CONTINUE7]]: 49f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 50f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP9]], label %[[PRED_STORE_IF8:.*]], label %[[PRED_STORE_CONTINUE9:.*]] 51f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_IF8]]: 52f0df4fbdSFlorian Hahn; IC1-NEXT: store i8 42, ptr [[NEXT_GEP3]], align 1 53f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[PRED_STORE_CONTINUE9]] 54f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_CONTINUE9]]: 55db0603cbSFlorian Hahn; IC1-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0 56f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP13]], label %[[PRED_STORE_IF10:.*]], label %[[PRED_STORE_CONTINUE11:.*]] 57f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_IF10]]: 58f0df4fbdSFlorian Hahn; IC1-NEXT: store i8 2, ptr [[NEXT_GEP]], align 1 59f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[PRED_STORE_CONTINUE11]] 60f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_CONTINUE11]]: 61db0603cbSFlorian Hahn; IC1-NEXT: [[TMP14:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1 62f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP14]], label %[[PRED_STORE_IF12:.*]], label %[[PRED_STORE_CONTINUE13]] 63f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_IF12]]: 64f0df4fbdSFlorian Hahn; IC1-NEXT: store i8 2, ptr [[NEXT_GEP3]], align 1 65f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[PRED_STORE_CONTINUE13]] 66f0df4fbdSFlorian Hahn; IC1: [[PRED_STORE_CONTINUE13]]: 67f0df4fbdSFlorian Hahn; IC1-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2 68f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP15:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]] 69f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP15]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]] 70f0df4fbdSFlorian Hahn; IC1: [[MIDDLE_BLOCK]]: 71f0df4fbdSFlorian Hahn; IC1-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP0]], [[N_VEC]] 72f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[CMP_N]], label %[[EXIT:.*]], label %[[SCALAR_PH]] 73f0df4fbdSFlorian Hahn; IC1: [[SCALAR_PH]]: 74f0df4fbdSFlorian Hahn; IC1-NEXT: [[BC_RESUME_VAL:%.*]] = phi ptr [ [[IND_END]], %[[MIDDLE_BLOCK]] ], [ [[START]], %[[ENTRY]] ] 7505f986e1SFlorian Hahn; IC1-NEXT: br label %[[LOOP_HEADER:.*]] 7605f986e1SFlorian Hahn; IC1: [[LOOP_HEADER]]: 77f0df4fbdSFlorian Hahn; IC1-NEXT: [[PTR_IV:%.*]] = phi ptr [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[PTR_IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] 7805f986e1SFlorian Hahn; IC1-NEXT: [[L:%.*]] = load i8, ptr [[PTR_IV]], align 1 7905f986e1SFlorian Hahn; IC1-NEXT: switch i8 [[L]], label %[[DEFAULT:.*]] [ 8005f986e1SFlorian Hahn; IC1-NEXT: i8 -12, label %[[IF_THEN_1:.*]] 8105f986e1SFlorian Hahn; IC1-NEXT: i8 13, label %[[IF_THEN_2:.*]] 8205f986e1SFlorian Hahn; IC1-NEXT: i8 0, label %[[DEFAULT]] 8305f986e1SFlorian Hahn; IC1-NEXT: ] 8405f986e1SFlorian Hahn; IC1: [[IF_THEN_1]]: 8505f986e1SFlorian Hahn; IC1-NEXT: store i8 42, ptr [[PTR_IV]], align 1 8605f986e1SFlorian Hahn; IC1-NEXT: br label %[[LOOP_LATCH]] 8705f986e1SFlorian Hahn; IC1: [[IF_THEN_2]]: 8805f986e1SFlorian Hahn; IC1-NEXT: store i8 0, ptr [[PTR_IV]], align 1 8905f986e1SFlorian Hahn; IC1-NEXT: br label %[[LOOP_LATCH]] 9005f986e1SFlorian Hahn; IC1: [[DEFAULT]]: 9105f986e1SFlorian Hahn; IC1-NEXT: store i8 2, ptr [[PTR_IV]], align 1 9205f986e1SFlorian Hahn; IC1-NEXT: br label %[[LOOP_LATCH]] 9305f986e1SFlorian Hahn; IC1: [[LOOP_LATCH]]: 9405f986e1SFlorian Hahn; IC1-NEXT: [[PTR_IV_NEXT]] = getelementptr inbounds i8, ptr [[PTR_IV]], i64 1 9505f986e1SFlorian Hahn; IC1-NEXT: [[EC:%.*]] = icmp eq ptr [[PTR_IV_NEXT]], [[END]] 96f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP3:![0-9]+]] 9705f986e1SFlorian Hahn; IC1: [[EXIT]]: 9805f986e1SFlorian Hahn; IC1-NEXT: ret void 9905f986e1SFlorian Hahn; 10005f986e1SFlorian Hahn; IC2-LABEL: define void @switch4_default_common_dest_with_case( 10105f986e1SFlorian Hahn; IC2-SAME: ptr [[START:%.*]], ptr [[END:%.*]]) { 10205f986e1SFlorian Hahn; IC2-NEXT: [[ENTRY:.*]]: 103f0df4fbdSFlorian Hahn; IC2-NEXT: [[START2:%.*]] = ptrtoint ptr [[START]] to i64 104f0df4fbdSFlorian Hahn; IC2-NEXT: [[END1:%.*]] = ptrtoint ptr [[END]] to i64 105f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP0:%.*]] = sub i64 [[END1]], [[START2]] 106f0df4fbdSFlorian Hahn; IC2-NEXT: [[MIN_ITERS_CHECK:%.*]] = icmp ult i64 [[TMP0]], 4 107f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[MIN_ITERS_CHECK]], label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] 108f0df4fbdSFlorian Hahn; IC2: [[VECTOR_PH]]: 109f0df4fbdSFlorian Hahn; IC2-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP0]], 4 110f0df4fbdSFlorian Hahn; IC2-NEXT: [[N_VEC:%.*]] = sub i64 [[TMP0]], [[N_MOD_VF]] 111f0df4fbdSFlorian Hahn; IC2-NEXT: [[IND_END:%.*]] = getelementptr i8, ptr [[START]], i64 [[N_VEC]] 112f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[VECTOR_BODY:.*]] 113f0df4fbdSFlorian Hahn; IC2: [[VECTOR_BODY]]: 114f0df4fbdSFlorian Hahn; IC2-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE28:.*]] ] 115f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP1:%.*]] = add i64 [[INDEX]], 0 116f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP2:%.*]] = add i64 [[INDEX]], 1 117f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP3:%.*]] = add i64 [[INDEX]], 2 118f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP4:%.*]] = add i64 [[INDEX]], 3 119f0df4fbdSFlorian Hahn; IC2-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP1]] 120f0df4fbdSFlorian Hahn; IC2-NEXT: [[NEXT_GEP3:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP2]] 121f0df4fbdSFlorian Hahn; IC2-NEXT: [[NEXT_GEP4:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP3]] 122f0df4fbdSFlorian Hahn; IC2-NEXT: [[NEXT_GEP5:%.*]] = getelementptr i8, ptr [[START]], i64 [[TMP4]] 123f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i32 0 124f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i32 2 125f0df4fbdSFlorian Hahn; IC2-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i8>, ptr [[TMP5]], align 1 126f0df4fbdSFlorian Hahn; IC2-NEXT: [[WIDE_LOAD6:%.*]] = load <2 x i8>, ptr [[TMP6]], align 1 127*38fffa63SPaul Walker; IC2-NEXT: [[TMP13:%.*]] = icmp eq <2 x i8> [[WIDE_LOAD]], splat (i8 -12) 128*38fffa63SPaul Walker; IC2-NEXT: [[TMP14:%.*]] = icmp eq <2 x i8> [[WIDE_LOAD6]], splat (i8 -12) 129*38fffa63SPaul Walker; IC2-NEXT: [[TMP7:%.*]] = icmp eq <2 x i8> [[WIDE_LOAD]], splat (i8 13) 130*38fffa63SPaul Walker; IC2-NEXT: [[TMP8:%.*]] = icmp eq <2 x i8> [[WIDE_LOAD6]], splat (i8 13) 131f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP21:%.*]] = or <2 x i1> [[TMP13]], [[TMP7]] 132f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP22:%.*]] = or <2 x i1> [[TMP14]], [[TMP8]] 133*38fffa63SPaul Walker; IC2-NEXT: [[TMP19:%.*]] = xor <2 x i1> [[TMP21]], splat (i1 true) 134*38fffa63SPaul Walker; IC2-NEXT: [[TMP20:%.*]] = xor <2 x i1> [[TMP22]], splat (i1 true) 135f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0 136f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP9]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] 137f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF]]: 138f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 0, ptr [[NEXT_GEP]], align 1 139f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE]] 140f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE]]: 141f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP10:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1 142f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP10]], label %[[PRED_STORE_IF7:.*]], label %[[PRED_STORE_CONTINUE8:.*]] 143f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF7]]: 144f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 0, ptr [[NEXT_GEP3]], align 1 145f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE8]] 146f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE8]]: 147f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP8]], i32 0 148f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP11]], label %[[PRED_STORE_IF9:.*]], label %[[PRED_STORE_CONTINUE10:.*]] 149f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF9]]: 150f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 0, ptr [[NEXT_GEP4]], align 1 151f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE10]] 152f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE10]]: 153f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP12:%.*]] = extractelement <2 x i1> [[TMP8]], i32 1 154f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP12]], label %[[PRED_STORE_IF11:.*]], label %[[PRED_STORE_CONTINUE12:.*]] 155f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF11]]: 156f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 0, ptr [[NEXT_GEP5]], align 1 157f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE12]] 158f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE12]]: 159f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP15:%.*]] = extractelement <2 x i1> [[TMP13]], i32 0 160f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP15]], label %[[PRED_STORE_IF13:.*]], label %[[PRED_STORE_CONTINUE14:.*]] 161f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF13]]: 162f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 42, ptr [[NEXT_GEP]], align 1 163f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE14]] 164f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE14]]: 165f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP16:%.*]] = extractelement <2 x i1> [[TMP13]], i32 1 166f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP16]], label %[[PRED_STORE_IF15:.*]], label %[[PRED_STORE_CONTINUE16:.*]] 167f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF15]]: 168f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 42, ptr [[NEXT_GEP3]], align 1 169f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE16]] 170f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE16]]: 171f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP17:%.*]] = extractelement <2 x i1> [[TMP14]], i32 0 172f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP17]], label %[[PRED_STORE_IF17:.*]], label %[[PRED_STORE_CONTINUE18:.*]] 173f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF17]]: 174f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 42, ptr [[NEXT_GEP4]], align 1 175f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE18]] 176f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE18]]: 177f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP18:%.*]] = extractelement <2 x i1> [[TMP14]], i32 1 178f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP18]], label %[[PRED_STORE_IF19:.*]], label %[[PRED_STORE_CONTINUE20:.*]] 179f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF19]]: 180f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 42, ptr [[NEXT_GEP5]], align 1 181f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE20]] 182f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE20]]: 183db0603cbSFlorian Hahn; IC2-NEXT: [[TMP25:%.*]] = extractelement <2 x i1> [[TMP19]], i32 0 184f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP25]], label %[[PRED_STORE_IF21:.*]], label %[[PRED_STORE_CONTINUE22:.*]] 185f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF21]]: 186f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 2, ptr [[NEXT_GEP]], align 1 187f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE22]] 188f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE22]]: 189db0603cbSFlorian Hahn; IC2-NEXT: [[TMP26:%.*]] = extractelement <2 x i1> [[TMP19]], i32 1 190f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP26]], label %[[PRED_STORE_IF23:.*]], label %[[PRED_STORE_CONTINUE24:.*]] 191f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF23]]: 192f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 2, ptr [[NEXT_GEP3]], align 1 193f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE24]] 194f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE24]]: 195db0603cbSFlorian Hahn; IC2-NEXT: [[TMP27:%.*]] = extractelement <2 x i1> [[TMP20]], i32 0 196f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP27]], label %[[PRED_STORE_IF25:.*]], label %[[PRED_STORE_CONTINUE26:.*]] 197f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF25]]: 198f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 2, ptr [[NEXT_GEP4]], align 1 199f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE26]] 200f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE26]]: 201db0603cbSFlorian Hahn; IC2-NEXT: [[TMP28:%.*]] = extractelement <2 x i1> [[TMP20]], i32 1 202f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP28]], label %[[PRED_STORE_IF27:.*]], label %[[PRED_STORE_CONTINUE28]] 203f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_IF27]]: 204f0df4fbdSFlorian Hahn; IC2-NEXT: store i8 2, ptr [[NEXT_GEP5]], align 1 205f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[PRED_STORE_CONTINUE28]] 206f0df4fbdSFlorian Hahn; IC2: [[PRED_STORE_CONTINUE28]]: 207f0df4fbdSFlorian Hahn; IC2-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 208f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP29:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]] 209f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP29]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]] 210f0df4fbdSFlorian Hahn; IC2: [[MIDDLE_BLOCK]]: 211f0df4fbdSFlorian Hahn; IC2-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP0]], [[N_VEC]] 212f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[CMP_N]], label %[[EXIT:.*]], label %[[SCALAR_PH]] 213f0df4fbdSFlorian Hahn; IC2: [[SCALAR_PH]]: 214f0df4fbdSFlorian Hahn; IC2-NEXT: [[BC_RESUME_VAL:%.*]] = phi ptr [ [[IND_END]], %[[MIDDLE_BLOCK]] ], [ [[START]], %[[ENTRY]] ] 21505f986e1SFlorian Hahn; IC2-NEXT: br label %[[LOOP_HEADER:.*]] 21605f986e1SFlorian Hahn; IC2: [[LOOP_HEADER]]: 217f0df4fbdSFlorian Hahn; IC2-NEXT: [[PTR_IV:%.*]] = phi ptr [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[PTR_IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] 21805f986e1SFlorian Hahn; IC2-NEXT: [[L:%.*]] = load i8, ptr [[PTR_IV]], align 1 21905f986e1SFlorian Hahn; IC2-NEXT: switch i8 [[L]], label %[[DEFAULT:.*]] [ 22005f986e1SFlorian Hahn; IC2-NEXT: i8 -12, label %[[IF_THEN_1:.*]] 22105f986e1SFlorian Hahn; IC2-NEXT: i8 13, label %[[IF_THEN_2:.*]] 22205f986e1SFlorian Hahn; IC2-NEXT: i8 0, label %[[DEFAULT]] 22305f986e1SFlorian Hahn; IC2-NEXT: ] 22405f986e1SFlorian Hahn; IC2: [[IF_THEN_1]]: 22505f986e1SFlorian Hahn; IC2-NEXT: store i8 42, ptr [[PTR_IV]], align 1 22605f986e1SFlorian Hahn; IC2-NEXT: br label %[[LOOP_LATCH]] 22705f986e1SFlorian Hahn; IC2: [[IF_THEN_2]]: 22805f986e1SFlorian Hahn; IC2-NEXT: store i8 0, ptr [[PTR_IV]], align 1 22905f986e1SFlorian Hahn; IC2-NEXT: br label %[[LOOP_LATCH]] 23005f986e1SFlorian Hahn; IC2: [[DEFAULT]]: 23105f986e1SFlorian Hahn; IC2-NEXT: store i8 2, ptr [[PTR_IV]], align 1 23205f986e1SFlorian Hahn; IC2-NEXT: br label %[[LOOP_LATCH]] 23305f986e1SFlorian Hahn; IC2: [[LOOP_LATCH]]: 23405f986e1SFlorian Hahn; IC2-NEXT: [[PTR_IV_NEXT]] = getelementptr inbounds i8, ptr [[PTR_IV]], i64 1 23505f986e1SFlorian Hahn; IC2-NEXT: [[EC:%.*]] = icmp eq ptr [[PTR_IV_NEXT]], [[END]] 236f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP3:![0-9]+]] 23705f986e1SFlorian Hahn; IC2: [[EXIT]]: 23805f986e1SFlorian Hahn; IC2-NEXT: ret void 23905f986e1SFlorian Hahn; 24005f986e1SFlorian Hahnentry: 24105f986e1SFlorian Hahn br label %loop.header 24205f986e1SFlorian Hahn 24305f986e1SFlorian Hahnloop.header: 24405f986e1SFlorian Hahn %ptr.iv = phi ptr [ %start, %entry ], [ %ptr.iv.next, %loop.latch ] 24505f986e1SFlorian Hahn %l = load i8, ptr %ptr.iv, align 1 24605f986e1SFlorian Hahn switch i8 %l, label %default [ 24705f986e1SFlorian Hahn i8 -12, label %if.then.1 24805f986e1SFlorian Hahn i8 13, label %if.then.2 24905f986e1SFlorian Hahn i8 0, label %default 25005f986e1SFlorian Hahn ] 25105f986e1SFlorian Hahn 25205f986e1SFlorian Hahnif.then.1: 25305f986e1SFlorian Hahn store i8 42, ptr %ptr.iv, align 1 25405f986e1SFlorian Hahn br label %loop.latch 25505f986e1SFlorian Hahn 25605f986e1SFlorian Hahnif.then.2: 25705f986e1SFlorian Hahn store i8 0, ptr %ptr.iv, align 1 25805f986e1SFlorian Hahn br label %loop.latch 25905f986e1SFlorian Hahn 26005f986e1SFlorian Hahndefault: 26105f986e1SFlorian Hahn store i8 2, ptr %ptr.iv, align 1 26205f986e1SFlorian Hahn br label %loop.latch 26305f986e1SFlorian Hahn 26405f986e1SFlorian Hahnloop.latch: 26505f986e1SFlorian Hahn %ptr.iv.next = getelementptr inbounds i8, ptr %ptr.iv, i64 1 26605f986e1SFlorian Hahn %ec = icmp eq ptr %ptr.iv.next, %end 26705f986e1SFlorian Hahn br i1 %ec, label %exit, label %loop.header 26805f986e1SFlorian Hahn 26905f986e1SFlorian Hahnexit: 27005f986e1SFlorian Hahn ret void 27105f986e1SFlorian Hahn} 27285570353SFlorian Hahn 27385570353SFlorian Hahndefine void @switch_exiting(ptr %start) { 27485570353SFlorian Hahn; IC1-LABEL: define void @switch_exiting( 27585570353SFlorian Hahn; IC1-SAME: ptr [[START:%.*]]) { 27685570353SFlorian Hahn; IC1-NEXT: [[ENTRY:.*]]: 27785570353SFlorian Hahn; IC1-NEXT: br label %[[LOOP_HEADER:.*]] 27885570353SFlorian Hahn; IC1: [[LOOP_HEADER]]: 27985570353SFlorian Hahn; IC1-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] 28085570353SFlorian Hahn; IC1-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH]] [ 28185570353SFlorian Hahn; IC1-NEXT: i64 -12, label %[[IF_THEN:.*]] 28285570353SFlorian Hahn; IC1-NEXT: i64 100, label %[[EXIT:.*]] 28385570353SFlorian Hahn; IC1-NEXT: ] 28485570353SFlorian Hahn; IC1: [[IF_THEN]]: 28585570353SFlorian Hahn; IC1-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 [[IV]] 28685570353SFlorian Hahn; IC1-NEXT: store i64 42, ptr [[GEP]], align 1 28785570353SFlorian Hahn; IC1-NEXT: br label %[[LOOP_LATCH]] 28885570353SFlorian Hahn; IC1: [[LOOP_LATCH]]: 28985570353SFlorian Hahn; IC1-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 29085570353SFlorian Hahn; IC1-NEXT: br label %[[LOOP_HEADER]] 29185570353SFlorian Hahn; IC1: [[EXIT]]: 29285570353SFlorian Hahn; IC1-NEXT: ret void 29385570353SFlorian Hahn; 29485570353SFlorian Hahn; IC2-LABEL: define void @switch_exiting( 29585570353SFlorian Hahn; IC2-SAME: ptr [[START:%.*]]) { 29685570353SFlorian Hahn; IC2-NEXT: [[ENTRY:.*]]: 29785570353SFlorian Hahn; IC2-NEXT: br label %[[LOOP_HEADER:.*]] 29885570353SFlorian Hahn; IC2: [[LOOP_HEADER]]: 29985570353SFlorian Hahn; IC2-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] 30085570353SFlorian Hahn; IC2-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH]] [ 30185570353SFlorian Hahn; IC2-NEXT: i64 -12, label %[[IF_THEN:.*]] 30285570353SFlorian Hahn; IC2-NEXT: i64 100, label %[[EXIT:.*]] 30385570353SFlorian Hahn; IC2-NEXT: ] 30485570353SFlorian Hahn; IC2: [[IF_THEN]]: 30585570353SFlorian Hahn; IC2-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 [[IV]] 30685570353SFlorian Hahn; IC2-NEXT: store i64 42, ptr [[GEP]], align 1 30785570353SFlorian Hahn; IC2-NEXT: br label %[[LOOP_LATCH]] 30885570353SFlorian Hahn; IC2: [[LOOP_LATCH]]: 30985570353SFlorian Hahn; IC2-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 31085570353SFlorian Hahn; IC2-NEXT: br label %[[LOOP_HEADER]] 31185570353SFlorian Hahn; IC2: [[EXIT]]: 31285570353SFlorian Hahn; IC2-NEXT: ret void 31385570353SFlorian Hahn; 31485570353SFlorian Hahnentry: 31585570353SFlorian Hahn br label %loop.header 31685570353SFlorian Hahn 31785570353SFlorian Hahnloop.header: 31885570353SFlorian Hahn %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ] 31985570353SFlorian Hahn switch i64 %iv, label %loop.latch [ 32085570353SFlorian Hahn i64 -12, label %if.then 32185570353SFlorian Hahn i64 100, label %exit 32285570353SFlorian Hahn ] 32385570353SFlorian Hahn 32485570353SFlorian Hahnif.then: 32585570353SFlorian Hahn %gep = getelementptr inbounds i64, ptr %start, i64 %iv 32685570353SFlorian Hahn store i64 42, ptr %gep, align 1 32785570353SFlorian Hahn br label %loop.latch 32885570353SFlorian Hahn 32985570353SFlorian Hahnloop.latch: 33085570353SFlorian Hahn %iv.next = add i64 %iv, 1 33185570353SFlorian Hahn br label %loop.header 33285570353SFlorian Hahn 33385570353SFlorian Hahnexit: 33485570353SFlorian Hahn ret void 33585570353SFlorian Hahn} 33685570353SFlorian Hahn 33785570353SFlorian Hahndefine void @switch_to_header(ptr %start) { 33885570353SFlorian Hahn; IC1-LABEL: define void @switch_to_header( 33985570353SFlorian Hahn; IC1-SAME: ptr [[START:%.*]]) { 34085570353SFlorian Hahn; IC1-NEXT: [[ENTRY:.*]]: 34185570353SFlorian Hahn; IC1-NEXT: br label %[[LOOP_HEADER:.*]] 34285570353SFlorian Hahn; IC1: [[LOOP_HEADER]]: 343*38fffa63SPaul Walker; IC1-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[IF_THEN1:.*]] ] 34485570353SFlorian Hahn; IC1-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 34585570353SFlorian Hahn; IC1-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH:.*]] [ 346*38fffa63SPaul Walker; IC1-NEXT: i64 120, label %[[IF_THEN1]] 34785570353SFlorian Hahn; IC1-NEXT: i64 100, label %[[LOOP_LATCH]] 34885570353SFlorian Hahn; IC1-NEXT: ] 349*38fffa63SPaul Walker; IC1: [[IF_THEN1]]: 35085570353SFlorian Hahn; IC1-NEXT: br label %[[LOOP_HEADER]] 35185570353SFlorian Hahn; IC1: [[IF_THEN:.*:]] 35285570353SFlorian Hahn; IC1-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 poison 35385570353SFlorian Hahn; IC1-NEXT: store i64 42, ptr [[GEP]], align 1 35485570353SFlorian Hahn; IC1-NEXT: unreachable 35585570353SFlorian Hahn; IC1: [[LOOP_LATCH]]: 35685570353SFlorian Hahn; IC1-NEXT: [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 100 357*38fffa63SPaul Walker; IC1-NEXT: br i1 [[CMP]], label %[[EXIT:.*]], label %[[IF_THEN1]] 35885570353SFlorian Hahn; IC1: [[EXIT]]: 35985570353SFlorian Hahn; IC1-NEXT: ret void 36085570353SFlorian Hahn; 36185570353SFlorian Hahn; IC2-LABEL: define void @switch_to_header( 36285570353SFlorian Hahn; IC2-SAME: ptr [[START:%.*]]) { 36385570353SFlorian Hahn; IC2-NEXT: [[ENTRY:.*]]: 36485570353SFlorian Hahn; IC2-NEXT: br label %[[LOOP_HEADER:.*]] 36585570353SFlorian Hahn; IC2: [[LOOP_HEADER]]: 366*38fffa63SPaul Walker; IC2-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[IF_THEN1:.*]] ] 36785570353SFlorian Hahn; IC2-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 36885570353SFlorian Hahn; IC2-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH:.*]] [ 369*38fffa63SPaul Walker; IC2-NEXT: i64 120, label %[[IF_THEN1]] 37085570353SFlorian Hahn; IC2-NEXT: i64 100, label %[[LOOP_LATCH]] 37185570353SFlorian Hahn; IC2-NEXT: ] 372*38fffa63SPaul Walker; IC2: [[IF_THEN1]]: 37385570353SFlorian Hahn; IC2-NEXT: br label %[[LOOP_HEADER]] 37485570353SFlorian Hahn; IC2: [[IF_THEN:.*:]] 37585570353SFlorian Hahn; IC2-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 poison 37685570353SFlorian Hahn; IC2-NEXT: store i64 42, ptr [[GEP]], align 1 37785570353SFlorian Hahn; IC2-NEXT: unreachable 37885570353SFlorian Hahn; IC2: [[LOOP_LATCH]]: 37985570353SFlorian Hahn; IC2-NEXT: [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 100 380*38fffa63SPaul Walker; IC2-NEXT: br i1 [[CMP]], label %[[EXIT:.*]], label %[[IF_THEN1]] 38185570353SFlorian Hahn; IC2: [[EXIT]]: 38285570353SFlorian Hahn; IC2-NEXT: ret void 38385570353SFlorian Hahn; 38485570353SFlorian Hahnentry: 38585570353SFlorian Hahn br label %loop.header 38685570353SFlorian Hahn 38785570353SFlorian Hahnloop.header: 38885570353SFlorian Hahn %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ], [ %iv.next, %loop.header ] 38985570353SFlorian Hahn %iv.next = add i64 %iv, 1 39085570353SFlorian Hahn switch i64 %iv, label %loop.latch [ 39185570353SFlorian Hahn i64 120, label %loop.header 39285570353SFlorian Hahn i64 100, label %loop.latch 39385570353SFlorian Hahn ] 39485570353SFlorian Hahn 39585570353SFlorian Hahnif.then: 39685570353SFlorian Hahn %gep = getelementptr inbounds i64, ptr %start, i64 %iv 39785570353SFlorian Hahn store i64 42, ptr %gep, align 1 39885570353SFlorian Hahn br label %loop.latch 39985570353SFlorian Hahn 40085570353SFlorian Hahnloop.latch: 40185570353SFlorian Hahn %cmp = icmp eq i64 %iv.next, 100 40285570353SFlorian Hahn br i1 %cmp, label %exit, label %loop.header 40385570353SFlorian Hahn 40485570353SFlorian Hahnexit: 40585570353SFlorian Hahn ret void 40685570353SFlorian Hahn} 40785570353SFlorian Hahn 40885570353SFlorian Hahndefine void @switch_all_to_default(ptr %start) { 40985570353SFlorian Hahn; IC1-LABEL: define void @switch_all_to_default( 41085570353SFlorian Hahn; IC1-SAME: ptr [[START:%.*]]) { 41185570353SFlorian Hahn; IC1-NEXT: [[ENTRY:.*]]: 412f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] 413f0df4fbdSFlorian Hahn; IC1: [[VECTOR_PH]]: 414f0df4fbdSFlorian Hahn; IC1-NEXT: br label %[[VECTOR_BODY:.*]] 415f0df4fbdSFlorian Hahn; IC1: [[VECTOR_BODY]]: 416f0df4fbdSFlorian Hahn; IC1-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ] 417f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 0 418f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP1:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 [[TMP0]] 419f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP2:%.*]] = getelementptr inbounds i64, ptr [[TMP1]], i32 0 420*38fffa63SPaul Walker; IC1-NEXT: store <2 x i64> splat (i64 42), ptr [[TMP2]], align 1 421f0df4fbdSFlorian Hahn; IC1-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2 422f0df4fbdSFlorian Hahn; IC1-NEXT: [[TMP3:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 423f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[TMP3]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]] 424f0df4fbdSFlorian Hahn; IC1: [[MIDDLE_BLOCK]]: 425f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 true, label %[[EXIT:.*]], label %[[SCALAR_PH]] 426f0df4fbdSFlorian Hahn; IC1: [[SCALAR_PH]]: 427f0df4fbdSFlorian Hahn; IC1-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 100, %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ] 42885570353SFlorian Hahn; IC1-NEXT: br label %[[LOOP_HEADER:.*]] 42985570353SFlorian Hahn; IC1: [[LOOP_HEADER]]: 430f0df4fbdSFlorian Hahn; IC1-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] 43185570353SFlorian Hahn; IC1-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 43285570353SFlorian Hahn; IC1-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH]] [ 43385570353SFlorian Hahn; IC1-NEXT: i64 120, label %[[LOOP_LATCH]] 43485570353SFlorian Hahn; IC1-NEXT: i64 100, label %[[LOOP_LATCH]] 43585570353SFlorian Hahn; IC1-NEXT: ] 43685570353SFlorian Hahn; IC1: [[LOOP_LATCH]]: 43785570353SFlorian Hahn; IC1-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 [[IV]] 43885570353SFlorian Hahn; IC1-NEXT: store i64 42, ptr [[GEP]], align 1 43985570353SFlorian Hahn; IC1-NEXT: [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 100 440f0df4fbdSFlorian Hahn; IC1-NEXT: br i1 [[CMP]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP5:![0-9]+]] 44185570353SFlorian Hahn; IC1: [[EXIT]]: 44285570353SFlorian Hahn; IC1-NEXT: ret void 44385570353SFlorian Hahn; 44485570353SFlorian Hahn; IC2-LABEL: define void @switch_all_to_default( 44585570353SFlorian Hahn; IC2-SAME: ptr [[START:%.*]]) { 44685570353SFlorian Hahn; IC2-NEXT: [[ENTRY:.*]]: 447f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] 448f0df4fbdSFlorian Hahn; IC2: [[VECTOR_PH]]: 449f0df4fbdSFlorian Hahn; IC2-NEXT: br label %[[VECTOR_BODY:.*]] 450f0df4fbdSFlorian Hahn; IC2: [[VECTOR_BODY]]: 451f0df4fbdSFlorian Hahn; IC2-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ] 452f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 0 453f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP2:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 [[TMP0]] 454f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP4:%.*]] = getelementptr inbounds i64, ptr [[TMP2]], i32 0 455f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP5:%.*]] = getelementptr inbounds i64, ptr [[TMP2]], i32 2 456*38fffa63SPaul Walker; IC2-NEXT: store <2 x i64> splat (i64 42), ptr [[TMP4]], align 1 457*38fffa63SPaul Walker; IC2-NEXT: store <2 x i64> splat (i64 42), ptr [[TMP5]], align 1 458f0df4fbdSFlorian Hahn; IC2-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4 459f0df4fbdSFlorian Hahn; IC2-NEXT: [[TMP6:%.*]] = icmp eq i64 [[INDEX_NEXT]], 100 460f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[TMP6]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4:![0-9]+]] 461f0df4fbdSFlorian Hahn; IC2: [[MIDDLE_BLOCK]]: 462f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 true, label %[[EXIT:.*]], label %[[SCALAR_PH]] 463f0df4fbdSFlorian Hahn; IC2: [[SCALAR_PH]]: 464f0df4fbdSFlorian Hahn; IC2-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 100, %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ] 46585570353SFlorian Hahn; IC2-NEXT: br label %[[LOOP_HEADER:.*]] 46685570353SFlorian Hahn; IC2: [[LOOP_HEADER]]: 467f0df4fbdSFlorian Hahn; IC2-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ] 46885570353SFlorian Hahn; IC2-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1 46985570353SFlorian Hahn; IC2-NEXT: switch i64 [[IV]], label %[[LOOP_LATCH]] [ 47085570353SFlorian Hahn; IC2-NEXT: i64 120, label %[[LOOP_LATCH]] 47185570353SFlorian Hahn; IC2-NEXT: i64 100, label %[[LOOP_LATCH]] 47285570353SFlorian Hahn; IC2-NEXT: ] 47385570353SFlorian Hahn; IC2: [[LOOP_LATCH]]: 47485570353SFlorian Hahn; IC2-NEXT: [[GEP:%.*]] = getelementptr inbounds i64, ptr [[START]], i64 [[IV]] 47585570353SFlorian Hahn; IC2-NEXT: store i64 42, ptr [[GEP]], align 1 47685570353SFlorian Hahn; IC2-NEXT: [[CMP:%.*]] = icmp eq i64 [[IV_NEXT]], 100 477f0df4fbdSFlorian Hahn; IC2-NEXT: br i1 [[CMP]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP5:![0-9]+]] 47885570353SFlorian Hahn; IC2: [[EXIT]]: 47985570353SFlorian Hahn; IC2-NEXT: ret void 48085570353SFlorian Hahn; 48185570353SFlorian Hahnentry: 48285570353SFlorian Hahn br label %loop.header 48385570353SFlorian Hahn 48485570353SFlorian Hahnloop.header: 48585570353SFlorian Hahn %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ] 48685570353SFlorian Hahn %iv.next = add i64 %iv, 1 48785570353SFlorian Hahn switch i64 %iv, label %loop.latch [ 48885570353SFlorian Hahn i64 120, label %loop.latch 48985570353SFlorian Hahn i64 100, label %loop.latch 49085570353SFlorian Hahn ] 49185570353SFlorian Hahn 49285570353SFlorian Hahnloop.latch: 49385570353SFlorian Hahn %gep = getelementptr inbounds i64, ptr %start, i64 %iv 49485570353SFlorian Hahn store i64 42, ptr %gep, align 1 49585570353SFlorian Hahn %cmp = icmp eq i64 %iv.next, 100 49685570353SFlorian Hahn br i1 %cmp, label %exit, label %loop.header 49785570353SFlorian Hahn 49885570353SFlorian Hahnexit: 49985570353SFlorian Hahn ret void 50085570353SFlorian Hahn} 501f0df4fbdSFlorian Hahn;. 502f0df4fbdSFlorian Hahn; IC1: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]} 503f0df4fbdSFlorian Hahn; IC1: [[META1]] = !{!"llvm.loop.isvectorized", i32 1} 504f0df4fbdSFlorian Hahn; IC1: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"} 505f0df4fbdSFlorian Hahn; IC1: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]], [[META1]]} 506f0df4fbdSFlorian Hahn; IC1: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]} 507f0df4fbdSFlorian Hahn; IC1: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]} 508f0df4fbdSFlorian Hahn;. 509f0df4fbdSFlorian Hahn; IC2: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]} 510f0df4fbdSFlorian Hahn; IC2: [[META1]] = !{!"llvm.loop.isvectorized", i32 1} 511f0df4fbdSFlorian Hahn; IC2: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"} 512f0df4fbdSFlorian Hahn; IC2: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]], [[META1]]} 513f0df4fbdSFlorian Hahn; IC2: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]} 514f0df4fbdSFlorian Hahn; IC2: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]} 515f0df4fbdSFlorian Hahn;. 516