Skip to content

Commit 85c59b2

Browse files
committed
[InstSimplify] Add pre-commit tests. NFC.
1 parent c05c909 commit 85c59b2

File tree

1 file changed

+213
-0
lines changed

1 file changed

+213
-0
lines changed

llvm/test/Transforms/InstSimplify/domcondition.ll

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,216 @@ end:
278278
}
279279

280280
declare void @foo(i32)
281+
282+
283+
define i1 @simplify_fcmp_implied_by_dom_cond_range_true(float %x) {
284+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_range_true(
285+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], 0.000000e+00
286+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
287+
; CHECK: if.then:
288+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp olt float [[X]], 1.000000e+00
289+
; CHECK-NEXT: ret i1 [[CMP2]]
290+
; CHECK: if.else:
291+
; CHECK-NEXT: ret i1 false
292+
;
293+
%cmp = fcmp olt float %x, 0.0
294+
br i1 %cmp, label %if.then, label %if.else
295+
296+
if.then:
297+
%cmp2 = fcmp olt float %x, 1.0
298+
ret i1 %cmp2
299+
300+
if.else:
301+
ret i1 false
302+
}
303+
304+
define i1 @simplify_fcmp_in_else_implied_by_dom_cond_range_true(float %x) {
305+
; CHECK-LABEL: @simplify_fcmp_in_else_implied_by_dom_cond_range_true(
306+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], 1.000000e+00
307+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
308+
; CHECK: if.then:
309+
; CHECK-NEXT: ret i1 true
310+
; CHECK: if.else:
311+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp uge float [[X]], 5.000000e-01
312+
; CHECK-NEXT: ret i1 [[CMP2]]
313+
;
314+
%cmp = fcmp olt float %x, 1.0
315+
br i1 %cmp, label %if.then, label %if.else
316+
317+
if.then:
318+
ret i1 true
319+
320+
if.else:
321+
%cmp2 = fcmp uge float %x, 0.5
322+
ret i1 %cmp2
323+
}
324+
325+
define i1 @simplify_fcmp_implied_by_dom_cond_range_false(float %x) {
326+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_range_false(
327+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], 0.000000e+00
328+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
329+
; CHECK: if.then:
330+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp ogt float [[X]], 1.000000e+00
331+
; CHECK-NEXT: ret i1 [[CMP2]]
332+
; CHECK: if.else:
333+
; CHECK-NEXT: ret i1 false
334+
;
335+
%cmp = fcmp olt float %x, 0.0
336+
br i1 %cmp, label %if.then, label %if.else
337+
338+
if.then:
339+
%cmp2 = fcmp ogt float %x, 1.0
340+
ret i1 %cmp2
341+
342+
if.else:
343+
ret i1 false
344+
}
345+
346+
define i1 @simplify_fcmp_implied_by_dom_cond_pred_true(float %x, float %y) {
347+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_pred_true(
348+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], [[Y:%.*]]
349+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
350+
; CHECK: if.then:
351+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp ole float [[X]], [[Y]]
352+
; CHECK-NEXT: ret i1 [[CMP2]]
353+
; CHECK: if.else:
354+
; CHECK-NEXT: ret i1 false
355+
;
356+
%cmp = fcmp olt float %x, %y
357+
br i1 %cmp, label %if.then, label %if.else
358+
359+
if.then:
360+
%cmp2 = fcmp ole float %x, %y
361+
ret i1 %cmp2
362+
363+
if.else:
364+
ret i1 false
365+
}
366+
367+
define i1 @simplify_fcmp_implied_by_dom_cond_pred_false(float %x, float %y) {
368+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_pred_false(
369+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], [[Y:%.*]]
370+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
371+
; CHECK: if.then:
372+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp ogt float [[X]], [[Y]]
373+
; CHECK-NEXT: ret i1 [[CMP2]]
374+
; CHECK: if.else:
375+
; CHECK-NEXT: ret i1 false
376+
;
377+
%cmp = fcmp olt float %x, %y
378+
br i1 %cmp, label %if.then, label %if.else
379+
380+
if.then:
381+
%cmp2 = fcmp ogt float %x, %y
382+
ret i1 %cmp2
383+
384+
if.else:
385+
ret i1 false
386+
}
387+
388+
define i1 @simplify_fcmp_implied_by_dom_cond_pred_commuted(float %x, float %y) {
389+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_pred_commuted(
390+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], [[Y:%.*]]
391+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
392+
; CHECK: if.then:
393+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp oge float [[Y]], [[X]]
394+
; CHECK-NEXT: ret i1 [[CMP2]]
395+
; CHECK: if.else:
396+
; CHECK-NEXT: ret i1 false
397+
;
398+
%cmp = fcmp olt float %x, %y
399+
br i1 %cmp, label %if.then, label %if.else
400+
401+
if.then:
402+
%cmp2 = fcmp oge float %y, %x
403+
ret i1 %cmp2
404+
405+
if.else:
406+
ret i1 false
407+
}
408+
409+
; Negative tests
410+
411+
define i1 @simplify_fcmp_implied_by_dom_cond_wrong_range(float %x) {
412+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_wrong_range(
413+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], 0.000000e+00
414+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
415+
; CHECK: if.then:
416+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp olt float [[X]], -1.000000e+00
417+
; CHECK-NEXT: ret i1 [[CMP2]]
418+
; CHECK: if.else:
419+
; CHECK-NEXT: ret i1 false
420+
;
421+
%cmp = fcmp olt float %x, 0.0
422+
br i1 %cmp, label %if.then, label %if.else
423+
424+
if.then:
425+
%cmp2 = fcmp olt float %x, -1.0
426+
ret i1 %cmp2
427+
428+
if.else:
429+
ret i1 false
430+
}
431+
432+
define i1 @simplify_fcmp_implied_by_dom_cond_range_mismatched_operand(float %x, float %y) {
433+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_range_mismatched_operand(
434+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], 0.000000e+00
435+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
436+
; CHECK: if.then:
437+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp olt float [[Y:%.*]], 1.000000e+00
438+
; CHECK-NEXT: ret i1 [[CMP2]]
439+
; CHECK: if.else:
440+
; CHECK-NEXT: ret i1 false
441+
;
442+
%cmp = fcmp olt float %x, 0.0
443+
br i1 %cmp, label %if.then, label %if.else
444+
445+
if.then:
446+
%cmp2 = fcmp olt float %y, 1.0
447+
ret i1 %cmp2
448+
449+
if.else:
450+
ret i1 false
451+
}
452+
453+
define i1 @simplify_fcmp_implied_by_dom_cond_wrong_pred(float %x, float %y) {
454+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_wrong_pred(
455+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ole float [[X:%.*]], [[Y:%.*]]
456+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
457+
; CHECK: if.then:
458+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp olt float [[X]], [[Y]]
459+
; CHECK-NEXT: ret i1 [[CMP2]]
460+
; CHECK: if.else:
461+
; CHECK-NEXT: ret i1 false
462+
;
463+
%cmp = fcmp ole float %x, %y
464+
br i1 %cmp, label %if.then, label %if.else
465+
466+
if.then:
467+
%cmp2 = fcmp olt float %x, %y
468+
ret i1 %cmp2
469+
470+
if.else:
471+
ret i1 false
472+
}
473+
474+
define i1 @simplify_fcmp_implied_by_dom_cond_pred_mismatched_operand(float %x, float %y, float %z) {
475+
; CHECK-LABEL: @simplify_fcmp_implied_by_dom_cond_pred_mismatched_operand(
476+
; CHECK-NEXT: [[CMP:%.*]] = fcmp olt float [[X:%.*]], [[Y:%.*]]
477+
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
478+
; CHECK: if.then:
479+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp ole float [[X]], [[Z:%.*]]
480+
; CHECK-NEXT: ret i1 [[CMP2]]
481+
; CHECK: if.else:
482+
; CHECK-NEXT: ret i1 false
483+
;
484+
%cmp = fcmp olt float %x, %y
485+
br i1 %cmp, label %if.then, label %if.else
486+
487+
if.then:
488+
%cmp2 = fcmp ole float %x, %z
489+
ret i1 %cmp2
490+
491+
if.else:
492+
ret i1 false
493+
}

0 commit comments

Comments
 (0)