; CHECK: final_right:
; CHECK-NEXT: call void @sideeffect0()
; CHECK-NEXT: br label [[COMMON_RET]]
+;
pred:
%c0 = icmp ne i32* %p, null
br i1 %c0, label %dispatch, label %final_right
; Drop dereferenceable on the parameter
define void @one_pred_with_spec_call_deref(i8 %v0, i8 %v1, i32* %p) {
-; CHECK-LABEL: one_pred_with_spec_call_deref
-; CHECK-LABEL: pred:
-; CHECK: %c0 = icmp ne i32* %p, null
-; CHECK: %x = call i32 @speculate_call(i32* %p)
+; CHECK-LABEL: @one_pred_with_spec_call_deref(
+; CHECK-NEXT: pred:
+; CHECK-NEXT: [[C0:%.*]] = icmp ne i32* [[P:%.*]], null
+; CHECK-NEXT: [[X:%.*]] = call i32 @speculate_call(i32* [[P]])
+; CHECK-NEXT: [[C1:%.*]] = icmp eq i8 [[V1:%.*]], 0
+; CHECK-NEXT: [[OR_COND:%.*]] = select i1 [[C0]], i1 [[C1]], i1 false
+; CHECK-NEXT: br i1 [[OR_COND]], label [[COMMON_RET:%.*]], label [[FINAL_RIGHT:%.*]]
+; CHECK: common.ret:
+; CHECK-NEXT: ret void
+; CHECK: final_right:
+; CHECK-NEXT: call void @sideeffect0()
+; CHECK-NEXT: br label [[COMMON_RET]]
+;
pred:
%c0 = icmp ne i32* %p, null
br i1 %c0, label %dispatch, label %final_right