@@ -541,18 +541,18 @@ define i32 @load_extract_clobber_store_between(ptr %x, ptr %y) {
541541define i32 @load_extract_clobber_store_between_limit (ptr %x , ptr %y , <8 x i32 > %z ) {
542542; CHECK-LABEL: @load_extract_clobber_store_between_limit(
543543; CHECK-NEXT: [[LV:%.*]] = load <4 x i32>, ptr [[X:%.*]], align 16
544- ; CHECK-NEXT: [[Z_0 :%.*]] = extractelement <8 x i32> [[Z :%.*]], i32 0
545- ; CHECK-NEXT: [[Z_1 :%.*]] = extractelement <8 x i32> [[Z ]], i32 1
546- ; CHECK-NEXT: [[ADD_0 :%.*]] = add i32 [[Z_0 ]], [[Z_1]]
547- ; CHECK-NEXT: [[Z_2 :%.*]] = extractelement <8 x i32> [[Z ]], i32 2
548- ; CHECK-NEXT: [[ADD_1 :%.*]] = add i32 [[ADD_0 ]], [[Z_2]]
549- ; CHECK-NEXT: [[Z_3 :%.*]] = extractelement <8 x i32> [[Z ]], i32 3
550- ; CHECK-NEXT: [[ADD_2 :%.*]] = add i32 [[ADD_1 ]], [[Z_3]]
551- ; CHECK-NEXT: [[Z_4 :%.*]] = extractelement <8 x i32> [[Z ]], i32 4
552- ; CHECK-NEXT: [[ADD_3 :%.*]] = add i32 [[ADD_2 ]], [[Z_4]]
544+ ; CHECK-NEXT: [[SHIFT :%.*]] = shufflevector <8 x i32> [[Z1 :%.*]], <8 x i32> poison, <8 x i32> <i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
545+ ; CHECK-NEXT: [[TMP1 :%.*]] = add <8 x i32> [[Z1 ]], [[SHIFT]]
546+ ; CHECK-NEXT: [[SHIFT1 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 2, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
547+ ; CHECK-NEXT: [[TMP2 :%.*]] = add <8 x i32> [[TMP1 ]], [[SHIFT1]]
548+ ; CHECK-NEXT: [[SHIFT2 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
549+ ; CHECK-NEXT: [[TMP3 :%.*]] = add <8 x i32> [[TMP2 ]], [[SHIFT2]]
550+ ; CHECK-NEXT: [[SHIFT3 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 4, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
551+ ; CHECK-NEXT: [[Z :%.*]] = add <8 x i32> [[TMP3 ]], [[SHIFT3]]
552+ ; CHECK-NEXT: [[Z_0 :%.*]] = extractelement <8 x i32> [[Z ]], i32 0
553553; CHECK-NEXT: store i8 0, ptr [[Y:%.*]], align 1
554554; CHECK-NEXT: [[R:%.*]] = extractelement <4 x i32> [[LV]], i32 2
555- ; CHECK-NEXT: [[ADD_4:%.*]] = add i32 [[ADD_3 ]], [[R]]
555+ ; CHECK-NEXT: [[ADD_4:%.*]] = add i32 [[Z_0 ]], [[R]]
556556; CHECK-NEXT: ret i32 [[ADD_4]]
557557;
558558 %lv = load <4 x i32 >, ptr %x
@@ -573,35 +573,35 @@ define i32 @load_extract_clobber_store_between_limit(ptr %x, ptr %y, <8 x i32> %
573573
574574define i32 @load_extract_clobber_store_after_limit (ptr %x , ptr %y , <8 x i32 > %z ) {
575575; LIMIT-DEFAULT-LABEL: @load_extract_clobber_store_after_limit(
576- ; LIMIT-DEFAULT-NEXT: [[Z_0 :%.*]] = extractelement <8 x i32> [[Z :%.*]], i32 0
577- ; LIMIT-DEFAULT-NEXT: [[Z_1 :%.*]] = extractelement <8 x i32> [[Z ]], i32 1
578- ; LIMIT-DEFAULT-NEXT: [[ADD_0 :%.*]] = add i32 [[Z_0 ]], [[Z_1]]
579- ; LIMIT-DEFAULT-NEXT: [[Z_2 :%.*]] = extractelement <8 x i32> [[Z ]], i32 2
580- ; LIMIT-DEFAULT-NEXT: [[ADD_1 :%.*]] = add i32 [[ADD_0 ]], [[Z_2]]
581- ; LIMIT-DEFAULT-NEXT: [[Z_3 :%.*]] = extractelement <8 x i32> [[Z ]], i32 3
582- ; LIMIT-DEFAULT-NEXT: [[ADD_2 :%.*]] = add i32 [[ADD_1 ]], [[Z_3]]
583- ; LIMIT-DEFAULT-NEXT: [[Z_4 :%.*]] = extractelement <8 x i32> [[Z ]], i32 4
584- ; LIMIT-DEFAULT-NEXT: [[ADD_3 :%.*]] = add i32 [[ADD_2 ]], [[Z_4]]
576+ ; LIMIT-DEFAULT-NEXT: [[SHIFT :%.*]] = shufflevector <8 x i32> [[Z1 :%.*]], <8 x i32> poison, <8 x i32> <i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
577+ ; LIMIT-DEFAULT-NEXT: [[TMP4 :%.*]] = add <8 x i32> [[Z1 ]], [[SHIFT]]
578+ ; LIMIT-DEFAULT-NEXT: [[SHIFT1 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 2, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
579+ ; LIMIT-DEFAULT-NEXT: [[TMP2 :%.*]] = add <8 x i32> [[TMP4 ]], [[SHIFT1]]
580+ ; LIMIT-DEFAULT-NEXT: [[SHIFT2 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
581+ ; LIMIT-DEFAULT-NEXT: [[TMP3 :%.*]] = add <8 x i32> [[TMP2 ]], [[SHIFT2]]
582+ ; LIMIT-DEFAULT-NEXT: [[SHIFT3 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 4, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
583+ ; LIMIT-DEFAULT-NEXT: [[Z :%.*]] = add <8 x i32> [[TMP3 ]], [[SHIFT3]]
584+ ; LIMIT-DEFAULT-NEXT: [[Z_0 :%.*]] = extractelement <8 x i32> [[Z ]], i32 0
585585; LIMIT-DEFAULT-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i32>, ptr [[X:%.*]], i32 0, i32 2
586586; LIMIT-DEFAULT-NEXT: [[R:%.*]] = load i32, ptr [[TMP1]], align 8
587587; LIMIT-DEFAULT-NEXT: store i8 0, ptr [[Y:%.*]], align 1
588- ; LIMIT-DEFAULT-NEXT: [[ADD_4:%.*]] = add i32 [[ADD_3 ]], [[R]]
588+ ; LIMIT-DEFAULT-NEXT: [[ADD_4:%.*]] = add i32 [[Z_0 ]], [[R]]
589589; LIMIT-DEFAULT-NEXT: ret i32 [[ADD_4]]
590590;
591591; LIMIT2-LABEL: @load_extract_clobber_store_after_limit(
592592; LIMIT2-NEXT: [[LV:%.*]] = load <4 x i32>, ptr [[X:%.*]], align 16
593- ; LIMIT2-NEXT: [[Z_0 :%.*]] = extractelement <8 x i32> [[Z :%.*]], i32 0
594- ; LIMIT2-NEXT: [[Z_1 :%.*]] = extractelement <8 x i32> [[Z ]], i32 1
595- ; LIMIT2-NEXT: [[ADD_0 :%.*]] = add i32 [[Z_0 ]], [[Z_1]]
596- ; LIMIT2-NEXT: [[Z_2 :%.*]] = extractelement <8 x i32> [[Z ]], i32 2
597- ; LIMIT2-NEXT: [[ADD_1 :%.*]] = add i32 [[ADD_0 ]], [[Z_2]]
598- ; LIMIT2-NEXT: [[Z_3 :%.*]] = extractelement <8 x i32> [[Z ]], i32 3
599- ; LIMIT2-NEXT: [[ADD_2 :%.*]] = add i32 [[ADD_1 ]], [[Z_3]]
600- ; LIMIT2-NEXT: [[Z_4 :%.*]] = extractelement <8 x i32> [[Z ]], i32 4
601- ; LIMIT2-NEXT: [[ADD_3 :%.*]] = add i32 [[ADD_2 ]], [[Z_4]]
593+ ; LIMIT2-NEXT: [[SHIFT :%.*]] = shufflevector <8 x i32> [[Z1 :%.*]], <8 x i32> poison, <8 x i32> <i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
594+ ; LIMIT2-NEXT: [[TMP1 :%.*]] = add <8 x i32> [[Z1 ]], [[SHIFT]]
595+ ; LIMIT2-NEXT: [[SHIFT1 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 2, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
596+ ; LIMIT2-NEXT: [[TMP2 :%.*]] = add <8 x i32> [[TMP1 ]], [[SHIFT1]]
597+ ; LIMIT2-NEXT: [[SHIFT2 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
598+ ; LIMIT2-NEXT: [[TMP3 :%.*]] = add <8 x i32> [[TMP2 ]], [[SHIFT2]]
599+ ; LIMIT2-NEXT: [[SHIFT3 :%.*]] = shufflevector <8 x i32> [[Z1 ]], <8 x i32> poison, <8 x i32> <i32 4, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
600+ ; LIMIT2-NEXT: [[Z :%.*]] = add <8 x i32> [[TMP3 ]], [[SHIFT3]]
601+ ; LIMIT2-NEXT: [[Z_0 :%.*]] = extractelement <8 x i32> [[Z ]], i32 0
602602; LIMIT2-NEXT: [[R:%.*]] = extractelement <4 x i32> [[LV]], i32 2
603603; LIMIT2-NEXT: store i8 0, ptr [[Y:%.*]], align 1
604- ; LIMIT2-NEXT: [[ADD_4:%.*]] = add i32 [[ADD_3 ]], [[R]]
604+ ; LIMIT2-NEXT: [[ADD_4:%.*]] = add i32 [[Z_0 ]], [[R]]
605605; LIMIT2-NEXT: ret i32 [[ADD_4]]
606606;
607607 %lv = load <4 x i32 >, ptr %x
@@ -671,9 +671,9 @@ define i1 @load_with_non_power_of_2_element_type_2(ptr %x) {
671671define i32 @load_multiple_extracts_with_constant_idx (ptr %x ) {
672672; CHECK-LABEL: @load_multiple_extracts_with_constant_idx(
673673; CHECK-NEXT: [[LV:%.*]] = load <4 x i32>, ptr [[X:%.*]], align 16
674- ; CHECK-NEXT: [[E_0 :%.*]] = extractelement <4 x i32> [[LV]], i32 0
675- ; CHECK-NEXT: [[E_1 :%.*]] = extractelement <4 x i32> [[LV]], i32 1
676- ; CHECK-NEXT: [[RES:%.*]] = add i32 [[E_0 ]], [[E_1]]
674+ ; CHECK-NEXT: [[SHIFT :%.*]] = shufflevector <4 x i32> [[LV]], <4 x i32> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>
675+ ; CHECK-NEXT: [[TMP1 :%.*]] = add <4 x i32> [[LV]], [[SHIFT]]
676+ ; CHECK-NEXT: [[RES:%.*]] = extractelement <4 x i32> [[TMP1 ]], i32 0
677677; CHECK-NEXT: ret i32 [[RES]]
678678;
679679 %lv = load <4 x i32 >, ptr %x
@@ -688,9 +688,9 @@ define i32 @load_multiple_extracts_with_constant_idx(ptr %x) {
688688define i32 @load_multiple_extracts_with_constant_idx_profitable (ptr %x ) {
689689; CHECK-LABEL: @load_multiple_extracts_with_constant_idx_profitable(
690690; CHECK-NEXT: [[LV:%.*]] = load <8 x i32>, ptr [[X:%.*]], align 16
691- ; CHECK-NEXT: [[E_0 :%.*]] = extractelement <8 x i32> [[LV]], i32 0
692- ; CHECK-NEXT: [[E_1 :%.*]] = extractelement <8 x i32> [[LV]], i32 6
693- ; CHECK-NEXT: [[RES:%.*]] = add i32 [[E_0 ]], [[E_1]]
691+ ; CHECK-NEXT: [[SHIFT :%.*]] = shufflevector <8 x i32> [[LV]], <8 x i32> poison, <8 x i32> <i32 6, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
692+ ; CHECK-NEXT: [[TMP1 :%.*]] = add <8 x i32> [[LV]], [[SHIFT]]
693+ ; CHECK-NEXT: [[RES:%.*]] = extractelement <8 x i32> [[TMP1 ]], i32 0
694694; CHECK-NEXT: ret i32 [[RES]]
695695;
696696 %lv = load <8 x i32 >, ptr %x , align 16
0 commit comments