102 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -S -passes=jump-threading < %s | FileCheck %s3 4; Test for assert that fired after5; ddb3f12c428bc4bd5a98913d74dfd7f2402bdfd8. simplifyFCmpInst is called6; with a literal negative nan without a context instruction.7 8 9; simplifyFCmpInst gets called without a context instruction and10; 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 %bb225 26bb1:27 br label %bb228 29bb2: ; preds = %bb1, %bb30 %i = phi float [ 0xFFFFFFFFE0000000, %bb ], [ 0.000000e+00, %bb1 ]31 %i3 = fcmp oeq float %i, %arg32 br i1 %i3, label %bb4, label %bb533 34bb4: ; preds = %bb235 br label %bb536 37bb5: ; preds = %bb4, %bb238 ret i1 %i339}40 41; simplifyFCmpInst gets called without a context instruction and42; 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 %bb257 58bb1:59 br label %bb260 61bb2: ; preds = %bb1, %bb62 %i = phi float [ 0xFFFFFFFFE0000000, %bb ], [ 0.000000e+00, %bb1 ]63 %i3 = fcmp ueq float %i, %arg64 br i1 %i3, label %bb4, label %bb565 66bb4: ; preds = %bb267 br label %bb568 69bb5: ; preds = %bb4, %bb270 ret i1 %i371}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 %bb287 88bb1:89 br label %bb290 91bb2: ; preds = %bb1, %bb92 %i = phi float [ 0x7FFFFFFFE0000000, %bb ], [ 0.000000e+00, %bb1 ]93 %i3 = fcmp oeq float %i, %arg94 br i1 %i3, label %bb4, label %bb595 96bb4: ; preds = %bb297 br label %bb598 99bb5: ; preds = %bb4, %bb2100 ret i1 %i3101}102