1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3 2; RUN: opt -S -passes=jump-threading < %s | FileCheck %s 3 4; Test for assert that fired after 5; ddb3f12c428bc4bd5a98913d74dfd7f2402bdfd8. simplifyFCmpInst is called 6; with a literal negative nan without a context instruction. 7 8 9; simplifyFCmpInst gets called without a context instruction and 10; expects to simplify an ordered compare with a negative nan. 11define i1 @simplify_fcmp_negative_nan_oeq(i1 %cond, float %arg) { 12; CHECK-LABEL: define i1 @simplify_fcmp_negative_nan_oeq( 13; CHECK-SAME: i1 [[COND:%.*]], float [[ARG:%.*]]) { 14; CHECK-NEXT: bb: 15; CHECK-NEXT: br i1 [[COND]], label [[BB2:%.*]], label [[BB5:%.*]] 16; CHECK: bb2: 17; CHECK-NEXT: [[I3:%.*]] = fcmp oeq float 0.000000e+00, [[ARG]] 18; CHECK-NEXT: br i1 [[I3]], label [[BB5]], label [[BB5]] 19; CHECK: bb5: 20; CHECK-NEXT: [[I33:%.*]] = phi i1 [ [[I3]], [[BB2]] ], [ [[I3]], [[BB2]] ], [ false, [[BB:%.*]] ] 21; CHECK-NEXT: ret i1 [[I33]] 22; 23bb: 24 br i1 %cond, label %bb1, label %bb2 25 26bb1: 27 br label %bb2 28 29bb2: ; preds = %bb1, %bb 30 %i = phi float [ 0xFFFFFFFFE0000000, %bb ], [ 0.000000e+00, %bb1 ] 31 %i3 = fcmp oeq float %i, %arg 32 br i1 %i3, label %bb4, label %bb5 33 34bb4: ; preds = %bb2 35 br label %bb5 36 37bb5: ; preds = %bb4, %bb2 38 ret i1 %i3 39} 40 41; simplifyFCmpInst gets called without a context instruction and 42; expects to simplify an unordered compare with a negative nan. 43define i1 @simplify_fcmp_negative_nan_ueq(i1 %cond, float %arg) { 44; CHECK-LABEL: define i1 @simplify_fcmp_negative_nan_ueq( 45; CHECK-SAME: i1 [[COND:%.*]], float [[ARG:%.*]]) { 46; CHECK-NEXT: bb: 47; CHECK-NEXT: br i1 [[COND]], label [[BB2:%.*]], label [[BB5:%.*]] 48; CHECK: bb2: 49; CHECK-NEXT: [[I3:%.*]] = fcmp ueq float 0.000000e+00, [[ARG]] 50; CHECK-NEXT: br i1 [[I3]], label [[BB5]], label [[BB5]] 51; CHECK: bb5: 52; CHECK-NEXT: [[I33:%.*]] = phi i1 [ [[I3]], [[BB2]] ], [ [[I3]], [[BB2]] ], [ true, [[BB:%.*]] ] 53; CHECK-NEXT: ret i1 [[I33]] 54; 55bb: 56 br i1 %cond, label %bb1, label %bb2 57 58bb1: 59 br label %bb2 60 61bb2: ; preds = %bb1, %bb 62 %i = phi float [ 0xFFFFFFFFE0000000, %bb ], [ 0.000000e+00, %bb1 ] 63 %i3 = fcmp ueq float %i, %arg 64 br i1 %i3, label %bb4, label %bb5 65 66bb4: ; preds = %bb2 67 br label %bb5 68 69bb5: ; preds = %bb4, %bb2 70 ret i1 %i3 71} 72 73define i1 @simplify_fcmp_positive_nan_oeq(i1 %cond, float %arg) { 74; CHECK-LABEL: define i1 @simplify_fcmp_positive_nan_oeq( 75; CHECK-SAME: i1 [[COND:%.*]], float [[ARG:%.*]]) { 76; CHECK-NEXT: bb: 77; CHECK-NEXT: br i1 [[COND]], label [[BB2:%.*]], label [[BB5:%.*]] 78; CHECK: bb2: 79; CHECK-NEXT: [[I3:%.*]] = fcmp oeq float 0.000000e+00, [[ARG]] 80; CHECK-NEXT: br i1 [[I3]], label [[BB5]], label [[BB5]] 81; CHECK: bb5: 82; CHECK-NEXT: [[I33:%.*]] = phi i1 [ [[I3]], [[BB2]] ], [ [[I3]], [[BB2]] ], [ false, [[BB:%.*]] ] 83; CHECK-NEXT: ret i1 [[I33]] 84; 85bb: 86 br i1 %cond, label %bb1, label %bb2 87 88bb1: 89 br label %bb2 90 91bb2: ; preds = %bb1, %bb 92 %i = phi float [ 0x7FFFFFFFE0000000, %bb ], [ 0.000000e+00, %bb1 ] 93 %i3 = fcmp oeq float %i, %arg 94 br i1 %i3, label %bb4, label %bb5 95 96bb4: ; preds = %bb2 97 br label %bb5 98 99bb5: ; preds = %bb4, %bb2 100 ret i1 %i3 101} 102