@@ -672,6 +672,40 @@ define i1 @assume_nonnan_x2_ord(float %x, float %y) {
672
672
ret i1 %cmp
673
673
}
674
674
675
+ define i1 @assume_nan_x2_uno (float %x , float %y ) {
676
+ ; CHECK-LABEL: @assume_nan_x2_uno(
677
+ ; CHECK-NEXT: [[UNO_X:%.*]] = fcmp uno float [[X:%.*]], 0.000000e+00
678
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[UNO_X]])
679
+ ; CHECK-NEXT: [[UNO_Y:%.*]] = fcmp uno float [[Y:%.*]], 0.000000e+00
680
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[UNO_Y]])
681
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp uno float [[X]], [[Y]]
682
+ ; CHECK-NEXT: ret i1 [[CMP]]
683
+ ;
684
+ %uno.x = fcmp uno float %x , 0 .0
685
+ call void @llvm.assume (i1 %uno.x )
686
+ %uno.y = fcmp uno float %y , 0 .0
687
+ call void @llvm.assume (i1 %uno.y )
688
+ %cmp = fcmp uno float %x , %y
689
+ ret i1 %cmp
690
+ }
691
+
692
+ define i1 @assume_nan_x2_ord (float %x , float %y ) {
693
+ ; CHECK-LABEL: @assume_nan_x2_ord(
694
+ ; CHECK-NEXT: [[UNO_X:%.*]] = fcmp uno float [[X:%.*]], 0.000000e+00
695
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[UNO_X]])
696
+ ; CHECK-NEXT: [[UNO_Y:%.*]] = fcmp uno float [[Y:%.*]], 0.000000e+00
697
+ ; CHECK-NEXT: call void @llvm.assume(i1 [[UNO_Y]])
698
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ord float [[X]], [[Y]]
699
+ ; CHECK-NEXT: ret i1 [[CMP]]
700
+ ;
701
+ %uno.x = fcmp uno float %x , 0 .0
702
+ call void @llvm.assume (i1 %uno.x )
703
+ %uno.y = fcmp uno float %y , 0 .0
704
+ call void @llvm.assume (i1 %uno.y )
705
+ %cmp = fcmp ord float %x , %y
706
+ ret i1 %cmp
707
+ }
708
+
675
709
define i1 @assume_nonan_x2_uno (float %x , float %y ) {
676
710
; CHECK-LABEL: @assume_nonan_x2_uno(
677
711
; CHECK-NEXT: [[ORD_X:%.*]] = fcmp ord float [[X:%.*]], 0.000000e+00
0 commit comments