@@ -4901,3 +4901,41 @@ define i32 @src_simplify_2x_at_once_and(i32 %x, i32 %y) {
4901
4901
%cond = select i1 %and0 , i32 %sub , i32 %xor
4902
4902
ret i32 %cond
4903
4903
}
4904
+
4905
+ define void @select_freeze_poison_parameter (ptr noundef %addr.src , ptr %addr.tgt , i1 %cond ) {
4906
+ ; CHECK-LABEL: @select_freeze_poison_parameter(
4907
+ ; CHECK-NEXT: [[ADDR_SRC:%.*]] = select i1 [[COND:%.*]], ptr [[ADDR_SRC1:%.*]], ptr null
4908
+ ; CHECK-NEXT: store ptr [[ADDR_SRC]], ptr [[ADDR_TGT:%.*]], align 8
4909
+ ; CHECK-NEXT: ret void
4910
+ ;
4911
+ %freeze = freeze ptr poison
4912
+ %select.addr = select i1 %cond , ptr %addr.src , ptr %freeze
4913
+ store ptr %select.addr , ptr %addr.tgt
4914
+ ret void
4915
+ }
4916
+
4917
+ @glb = global ptr null
4918
+
4919
+ define void @select_freeze_poison_global (ptr %addr.tgt , i1 %cond ) {
4920
+ ; CHECK-LABEL: @select_freeze_poison_global(
4921
+ ; CHECK-NEXT: [[SELECT_ADDR:%.*]] = select i1 [[COND:%.*]], ptr @glb, ptr null
4922
+ ; CHECK-NEXT: store ptr [[SELECT_ADDR]], ptr [[ADDR_TGT:%.*]], align 8
4923
+ ; CHECK-NEXT: ret void
4924
+ ;
4925
+ %freeze = freeze ptr poison
4926
+ %select.addr = select i1 %cond , ptr @glb , ptr %freeze
4927
+ store ptr %select.addr , ptr %addr.tgt
4928
+ ret void
4929
+ }
4930
+
4931
+ define void @select_freeze_poison_constant (ptr %addr.tgt , i1 %cond ) {
4932
+ ; CHECK-LABEL: @select_freeze_poison_constant(
4933
+ ; CHECK-NEXT: [[SELECT_ADDR:%.*]] = select i1 [[COND:%.*]], i32 72, i32 0
4934
+ ; CHECK-NEXT: store i32 [[SELECT_ADDR]], ptr [[ADDR_TGT:%.*]], align 4
4935
+ ; CHECK-NEXT: ret void
4936
+ ;
4937
+ %freeze = freeze i32 poison
4938
+ %select.addr = select i1 %cond , i32 72 , i32 %freeze
4939
+ store i32 %select.addr , ptr %addr.tgt
4940
+ ret void
4941
+ }
0 commit comments