@@ -72,10 +72,9 @@ define i32 @succ1to0_phi(ptr %p) {
72
72
; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[P:%.*]], null
73
73
; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[COND]], true
74
74
; CHECK-NEXT: [[TMP1:%.*]] = bitcast i1 [[TMP0]] to <1 x i1>
75
- ; CHECK-NEXT: [[TMP2:%.*]] = call <1 x i32> @llvm.masked.load.v1i32.p0(ptr [[P]], i32 4, <1 x i1> [[TMP1]], <1 x i32> poison )
75
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <1 x i32> @llvm.masked.load.v1i32.p0(ptr [[P]], i32 4, <1 x i1> [[TMP1]], <1 x i32> zeroinitializer )
76
76
; CHECK-NEXT: [[TMP3:%.*]] = bitcast <1 x i32> [[TMP2]] to i32
77
- ; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[COND]], i32 0, i32 [[TMP3]]
78
- ; CHECK-NEXT: ret i32 [[SPEC_SELECT]]
77
+ ; CHECK-NEXT: ret i32 [[TMP3]]
79
78
;
80
79
entry:
81
80
%cond = icmp eq ptr %p , null
@@ -184,10 +183,9 @@ define i32 @load_from_gep(ptr %p) {
184
183
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 16
185
184
; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[COND]], true
186
185
; CHECK-NEXT: [[TMP1:%.*]] = bitcast i1 [[TMP0]] to <1 x i1>
187
- ; CHECK-NEXT: [[TMP2:%.*]] = call <1 x i32> @llvm.masked.load.v1i32.p0(ptr [[ARRAYIDX]], i32 4, <1 x i1> [[TMP1]], <1 x i32> poison )
186
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <1 x i32> @llvm.masked.load.v1i32.p0(ptr [[ARRAYIDX]], i32 4, <1 x i1> [[TMP1]], <1 x i32> zeroinitializer )
188
187
; CHECK-NEXT: [[TMP3:%.*]] = bitcast <1 x i32> [[TMP2]] to i32
189
- ; CHECK-NEXT: [[SPEC_SELECT:%.*]] = select i1 [[COND]], i32 0, i32 [[TMP3]]
190
- ; CHECK-NEXT: ret i32 [[SPEC_SELECT]]
188
+ ; CHECK-NEXT: ret i32 [[TMP3]]
191
189
;
192
190
entry:
193
191
%cond = icmp eq ptr %p , null
@@ -674,6 +672,62 @@ if.false:
674
672
ret void
675
673
}
676
674
675
+ define i32 @str_transcode0 (i1 %cond1 , ptr %p , i1 %cond2 ) {
676
+ ; CHECK-LABEL: @str_transcode0(
677
+ ; CHECK-NEXT: entry:
678
+ ; CHECK-NEXT: br i1 [[COND1:%.*]], label [[BB3:%.*]], label [[BB1:%.*]]
679
+ ; CHECK: bb1:
680
+ ; CHECK-NEXT: [[TMP0:%.*]] = bitcast i1 [[COND2:%.*]] to <1 x i1>
681
+ ; CHECK-NEXT: [[TMP1:%.*]] = call <1 x i64> @llvm.masked.load.v1i64.p0(ptr [[P:%.*]], i32 8, <1 x i1> [[TMP0]], <1 x i64> zeroinitializer)
682
+ ; CHECK-NEXT: [[TMP2:%.*]] = bitcast <1 x i64> [[TMP1]] to i64
683
+ ; CHECK-NEXT: br label [[BB3]]
684
+ ; CHECK: bb3:
685
+ ; CHECK-NEXT: [[Y:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[TMP2]], [[BB1]] ]
686
+ ; CHECK-NEXT: store i64 [[Y]], ptr [[P]], align 8
687
+ ; CHECK-NEXT: ret i32 0
688
+ ;
689
+ entry:
690
+ br i1 %cond1 , label %bb3 , label %bb1
691
+
692
+ bb1: ; preds = %entry
693
+ br i1 %cond2 , label %bb2 , label %bb3
694
+
695
+ bb2: ; preds = %bb1
696
+ %x = load i64 , ptr %p , align 8
697
+ br label %bb3
698
+
699
+ bb3: ; preds = %bb2, %bb1, %entry
700
+ %y = phi i64 [ %x , %bb2 ], [ 0 , %bb1 ], [ 0 , %entry ]
701
+ store i64 %y , ptr %p , align 8
702
+ ret i32 0
703
+ }
704
+
705
+ define i32 @succ1to0_phi2 (ptr %p , ptr %p2 ) {
706
+ ; CHECK-LABEL: @succ1to0_phi2(
707
+ ; CHECK-NEXT: entry:
708
+ ; CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[P:%.*]], null
709
+ ; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[COND]], true
710
+ ; CHECK-NEXT: [[TMP1:%.*]] = bitcast i1 [[TMP0]] to <1 x i1>
711
+ ; CHECK-NEXT: [[TMP2:%.*]] = call <1 x i32> @llvm.masked.load.v1i32.p0(ptr [[P]], i32 4, <1 x i1> [[TMP1]], <1 x i32> zeroinitializer)
712
+ ; CHECK-NEXT: [[TMP3:%.*]] = bitcast <1 x i32> [[TMP2]] to i32
713
+ ; CHECK-NEXT: [[TMP4:%.*]] = bitcast i32 [[TMP3]] to <1 x i32>
714
+ ; CHECK-NEXT: call void @llvm.masked.store.v1i32.p0(<1 x i32> [[TMP4]], ptr [[P2:%.*]], i32 4, <1 x i1> [[TMP1]])
715
+ ; CHECK-NEXT: ret i32 [[TMP3]]
716
+ ;
717
+ entry:
718
+ %cond = icmp eq ptr %p , null
719
+ br i1 %cond , label %if.true , label %if.false
720
+
721
+ if.false:
722
+ %0 = load i32 , ptr %p
723
+ store i32 %0 , ptr %p2
724
+ br label %if.true
725
+
726
+ if.true:
727
+ %res = phi i32 [ %0 , %if.false ], [ 0 , %entry ]
728
+ ret i32 %res
729
+ }
730
+
677
731
declare i32 @read_memory_only () readonly nounwind willreturn speculatable
678
732
679
733
!llvm.dbg.cu = !{!0 }
0 commit comments