@@ -740,8 +740,6 @@ exit:
740
740
ret void
741
741
}
742
742
743
- ; FIXME: Currently %l.idx is incorrectly executed unconditionally in the vector
744
- ; loop.
745
743
define void @adding_offset_overflows (i32 %n , ptr %A ) {
746
744
; CHECK-LABEL: @adding_offset_overflows(
747
745
; CHECK-NEXT: entry:
@@ -767,8 +765,26 @@ define void @adding_offset_overflows(i32 %n, ptr %A) {
767
765
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 [[OFFSET_IDX]]
768
766
; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP2]], align 4
769
767
; CHECK-NEXT: [[TMP3:%.*]] = icmp ne <2 x i32> [[WIDE_LOAD]], zeroinitializer
770
- ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i32, ptr [[B]], i64 [[OFFSET_IDX]]
771
- ; CHECK-NEXT: [[WIDE_LOAD1:%.*]] = load <2 x i32>, ptr [[TMP4]], align 4
768
+ ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x i1> [[TMP3]], i32 0
769
+ ; CHECK-NEXT: br i1 [[TMP4]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]
770
+ ; CHECK: pred.load.if:
771
+ ; CHECK-NEXT: [[TMP15:%.*]] = add i64 [[OFFSET_IDX]], 0
772
+ ; CHECK-NEXT: [[TMP16:%.*]] = getelementptr i32, ptr [[B]], i64 [[TMP15]]
773
+ ; CHECK-NEXT: [[TMP17:%.*]] = load i32, ptr [[TMP16]], align 4
774
+ ; CHECK-NEXT: [[TMP18:%.*]] = insertelement <2 x i32> poison, i32 [[TMP17]], i32 0
775
+ ; CHECK-NEXT: br label [[PRED_LOAD_CONTINUE]]
776
+ ; CHECK: pred.load.continue:
777
+ ; CHECK-NEXT: [[TMP19:%.*]] = phi <2 x i32> [ poison, [[VECTOR_BODY]] ], [ [[TMP18]], [[PRED_LOAD_IF]] ]
778
+ ; CHECK-NEXT: [[TMP20:%.*]] = extractelement <2 x i1> [[TMP3]], i32 1
779
+ ; CHECK-NEXT: br i1 [[TMP20]], label [[PRED_LOAD_IF1:%.*]], label [[PRED_LOAD_CONTINUE2:%.*]]
780
+ ; CHECK: pred.load.if1:
781
+ ; CHECK-NEXT: [[TMP21:%.*]] = add i64 [[OFFSET_IDX]], 1
782
+ ; CHECK-NEXT: [[TMP22:%.*]] = getelementptr i32, ptr [[B]], i64 [[TMP21]]
783
+ ; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr [[TMP22]], align 4
784
+ ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x i32> [[TMP19]], i32 [[TMP13]], i32 1
785
+ ; CHECK-NEXT: br label [[PRED_LOAD_CONTINUE2]]
786
+ ; CHECK: pred.load.continue2:
787
+ ; CHECK-NEXT: [[WIDE_LOAD1:%.*]] = phi <2 x i32> [ [[TMP19]], [[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], [[PRED_LOAD_IF1]] ]
772
788
; CHECK-NEXT: [[TMP5:%.*]] = sext <2 x i32> [[WIDE_LOAD1]] to <2 x i64>
773
789
; CHECK-NEXT: [[TMP6:%.*]] = extractelement <2 x i1> [[TMP3]], i32 0
774
790
; CHECK-NEXT: br i1 [[TMP6]], label [[PRED_STORE_IF:%.*]], label [[PRED_STORE_CONTINUE:%.*]]
@@ -780,12 +796,12 @@ define void @adding_offset_overflows(i32 %n, ptr %A) {
780
796
; CHECK: pred.store.continue:
781
797
; CHECK-NEXT: [[TMP9:%.*]] = extractelement <2 x i1> [[TMP3]], i32 1
782
798
; CHECK-NEXT: br i1 [[TMP9]], label [[PRED_STORE_IF2:%.*]], label [[PRED_STORE_CONTINUE3]]
783
- ; CHECK: pred.store.if2 :
799
+ ; CHECK: pred.store.if3 :
784
800
; CHECK-NEXT: [[TMP10:%.*]] = extractelement <2 x i64> [[TMP5]], i32 1
785
801
; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i32, ptr [[C]], i64 [[TMP10]]
786
802
; CHECK-NEXT: store i32 0, ptr [[TMP11]], align 4
787
803
; CHECK-NEXT: br label [[PRED_STORE_CONTINUE3]]
788
- ; CHECK: pred.store.continue3 :
804
+ ; CHECK: pred.store.continue4 :
789
805
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2
790
806
; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
791
807
; CHECK-NEXT: br i1 [[TMP12]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP16:![0-9]+]]
0 commit comments