@@ -620,3 +620,51 @@ define i8 @oneArgPromotionBlockSExtZExt(i1 %arg1, ptr %base) {
620
620
%res = load i8 , ptr %arrayidx
621
621
ret i8 %res
622
622
}
623
+
624
+ ; Check that we replace the deleted sext with the promoted value.
625
+ define void @pr70938 (ptr %f ) {
626
+ ; CHECK-LABEL: define void @pr70938(
627
+ ; CHECK-SAME: ptr [[F:%.*]]) {
628
+ ; CHECK-NEXT: [[ENTRY:.*:]]
629
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 0, 1
630
+ ; CHECK-NEXT: [[SUNKADDR:%.*]] = mul i64 [[ADD]], 2
631
+ ; CHECK-NEXT: [[SUNKADDR1:%.*]] = getelementptr i8, ptr [[F]], i64 [[SUNKADDR]]
632
+ ; CHECK-NEXT: [[SUNKADDR2:%.*]] = getelementptr i8, ptr [[SUNKADDR1]], i64 1
633
+ ; CHECK-NEXT: store i8 0, ptr [[SUNKADDR2]], align 1
634
+ ; CHECK-NEXT: ret void
635
+ ;
636
+ entry:
637
+ %add = add nsw i32 0 , 1
638
+ %idxprom3 = sext i32 %add to i64
639
+ %arrayidx4 = getelementptr [2 x [1 x [2 x i8 ]]], ptr %f , i64 0 , i64 %idxprom3
640
+ %arrayidx8 = getelementptr [2 x i8 ], ptr %arrayidx4 , i64 0 , i64 %idxprom3
641
+ br label %if.end
642
+
643
+ if.end: ; preds = %entry
644
+ store i8 0 , ptr %arrayidx8 , align 1
645
+ ret void
646
+ }
647
+
648
+ define void @pr119429 () {
649
+ ; CHECK-LABEL: define void @pr119429() {
650
+ ; CHECK-NEXT: [[ENTRY:.*:]]
651
+ ; CHECK-NEXT: [[AND:%.*]] = and i64 0, 0
652
+ ; CHECK-NEXT: [[SUNKADDR:%.*]] = inttoptr i64 [[AND]] to ptr
653
+ ; CHECK-NEXT: [[SUNKADDR1:%.*]] = mul i64 [[AND]], 2
654
+ ; CHECK-NEXT: [[SUNKADDR2:%.*]] = getelementptr i8, ptr [[SUNKADDR]], i64 [[SUNKADDR1]]
655
+ ; CHECK-NEXT: store i64 0, ptr [[SUNKADDR2]], align 8
656
+ ; CHECK-NEXT: ret void
657
+ ;
658
+ entry:
659
+ %and = and i32 0 , 0
660
+ %conv1 = zext i32 %and to i64
661
+ %sub = add i64 %conv1 , 0
662
+ br label %if.end
663
+
664
+ if.end:
665
+ %mul = shl i64 %sub , 1
666
+ %add = add i64 %mul , %conv1
667
+ %ptr = inttoptr i64 %add to ptr
668
+ store i64 0 , ptr %ptr , align 8
669
+ ret void
670
+ }
0 commit comments