@@ -4901,3 +4901,41 @@ define i32 @src_simplify_2x_at_once_and(i32 %x, i32 %y) {
49014901 %cond = select i1 %and0 , i32 %sub , i32 %xor
49024902 ret i32 %cond
49034903}
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