287 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i1 @olt_pinf(half %x) {5; CHECK-LABEL: define i1 @olt_pinf(6; CHECK-SAME: half [[X:%.*]]) {7; CHECK-NEXT: [[CMP:%.*]] = fcmp one half [[X]], 0xH7C008; CHECK-NEXT: ret i1 [[CMP]]9;10 %cmp = fcmp olt half %x, 0xH7c0011 ret i1 %cmp12}13 14define i1 @ole_pinf(half %x) {15; CHECK-LABEL: define i1 @ole_pinf(16; CHECK-SAME: half [[X:%.*]]) {17; CHECK-NEXT: [[CMP:%.*]] = fcmp ord half [[X]], 0xH000018; CHECK-NEXT: ret i1 [[CMP]]19;20 %cmp = fcmp ole half %x, 0xH7c0021 ret i1 %cmp22}23 24define i1 @ogt_pinf(half %x) {25; CHECK-LABEL: define i1 @ogt_pinf(26; CHECK-SAME: half [[X:%.*]]) {27; CHECK-NEXT: ret i1 false28;29 %cmp = fcmp ogt half %x, 0xH7c0030 ret i1 %cmp31}32 33define i1 @oge_pinf(half %x) {34; CHECK-LABEL: define i1 @oge_pinf(35; CHECK-SAME: half [[X:%.*]]) {36; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq half [[X]], 0xH7C0037; CHECK-NEXT: ret i1 [[CMP]]38;39 %cmp = fcmp oge half %x, 0xH7c0040 ret i1 %cmp41}42 43define i1 @ult_pinf(half %x) {44; CHECK-LABEL: define i1 @ult_pinf(45; CHECK-SAME: half [[X:%.*]]) {46; CHECK-NEXT: [[CMP:%.*]] = fcmp une half [[X]], 0xH7C0047; CHECK-NEXT: ret i1 [[CMP]]48;49 %cmp = fcmp ult half %x, 0xH7c0050 ret i1 %cmp51}52 53define i1 @ule_pinf(half %x) {54; CHECK-LABEL: define i1 @ule_pinf(55; CHECK-SAME: half [[X:%.*]]) {56; CHECK-NEXT: ret i1 true57;58 %cmp = fcmp ule half %x, 0xH7c0059 ret i1 %cmp60}61 62define i1 @ugt_pinf(half %x) {63; CHECK-LABEL: define i1 @ugt_pinf(64; CHECK-SAME: half [[X:%.*]]) {65; CHECK-NEXT: [[CMP:%.*]] = fcmp uno half [[X]], 0xH000066; CHECK-NEXT: ret i1 [[CMP]]67;68 %cmp = fcmp ugt half %x, 0xH7c0069 ret i1 %cmp70}71 72define i1 @uge_pinf(half %x) {73; CHECK-LABEL: define i1 @uge_pinf(74; CHECK-SAME: half [[X:%.*]]) {75; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq half [[X]], 0xH7C0076; CHECK-NEXT: ret i1 [[CMP]]77;78 %cmp = fcmp uge half %x, 0xH7c0079 ret i1 %cmp80}81 82define i1 @olt_ninf(half %x) {83; CHECK-LABEL: define i1 @olt_ninf(84; CHECK-SAME: half [[X:%.*]]) {85; CHECK-NEXT: ret i1 false86;87 %cmp = fcmp olt half %x, 0xHfc0088 ret i1 %cmp89}90 91define i1 @ole_ninf(half %x) {92; CHECK-LABEL: define i1 @ole_ninf(93; CHECK-SAME: half [[X:%.*]]) {94; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq half [[X]], 0xHFC0095; CHECK-NEXT: ret i1 [[CMP]]96;97 %cmp = fcmp ole half %x, 0xHfc0098 ret i1 %cmp99}100 101define i1 @ogt_ninf(half %x) {102; CHECK-LABEL: define i1 @ogt_ninf(103; CHECK-SAME: half [[X:%.*]]) {104; CHECK-NEXT: [[CMP:%.*]] = fcmp one half [[X]], 0xHFC00105; CHECK-NEXT: ret i1 [[CMP]]106;107 %cmp = fcmp ogt half %x, 0xHfc00108 ret i1 %cmp109}110 111define i1 @oge_ninf(half %x) {112; CHECK-LABEL: define i1 @oge_ninf(113; CHECK-SAME: half [[X:%.*]]) {114; CHECK-NEXT: [[CMP:%.*]] = fcmp ord half [[X]], 0xH0000115; CHECK-NEXT: ret i1 [[CMP]]116;117 %cmp = fcmp oge half %x, 0xHfc00118 ret i1 %cmp119}120 121define i1 @ult_ninf(half %x) {122; CHECK-LABEL: define i1 @ult_ninf(123; CHECK-SAME: half [[X:%.*]]) {124; CHECK-NEXT: [[CMP:%.*]] = fcmp uno half [[X]], 0xH0000125; CHECK-NEXT: ret i1 [[CMP]]126;127 %cmp = fcmp ult half %x, 0xHfc00128 ret i1 %cmp129}130 131define i1 @ule_ninf(half %x) {132; CHECK-LABEL: define i1 @ule_ninf(133; CHECK-SAME: half [[X:%.*]]) {134; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq half [[X]], 0xHFC00135; CHECK-NEXT: ret i1 [[CMP]]136;137 %cmp = fcmp ule half %x, 0xHfc00138 ret i1 %cmp139}140 141define i1 @ugt_ninf(half %x) {142; CHECK-LABEL: define i1 @ugt_ninf(143; CHECK-SAME: half [[X:%.*]]) {144; CHECK-NEXT: [[CMP:%.*]] = fcmp une half [[X]], 0xHFC00145; CHECK-NEXT: ret i1 [[CMP]]146;147 %cmp = fcmp ugt half %x, 0xHfc00148 ret i1 %cmp149}150 151define i1 @uge_ninf(half %x) {152; CHECK-LABEL: define i1 @uge_ninf(153; CHECK-SAME: half [[X:%.*]]) {154; CHECK-NEXT: ret i1 true155;156 %cmp = fcmp uge half %x, 0xHfc00157 ret i1 %cmp158}159 160define i1 @olt_pinf_fmf(half %x) {161; CHECK-LABEL: define i1 @olt_pinf_fmf(162; CHECK-SAME: half [[X:%.*]]) {163; CHECK-NEXT: [[CMP:%.*]] = fcmp nsz one half [[X]], 0xH7C00164; CHECK-NEXT: ret i1 [[CMP]]165;166 %cmp = fcmp nsz olt half %x, 0xH7c00167 ret i1 %cmp168}169 170define i1 @oge_pinf_fmf(half %x) {171; CHECK-LABEL: define i1 @oge_pinf_fmf(172; CHECK-SAME: half [[X:%.*]]) {173; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan oeq half [[X]], 0xH7C00174; CHECK-NEXT: ret i1 [[CMP]]175;176 %cmp = fcmp nnan oge half %x, 0xH7c00177 ret i1 %cmp178}179 180define <2 x i1> @olt_pinf_vec(<2 x half> %x) {181; CHECK-LABEL: define <2 x i1> @olt_pinf_vec(182; CHECK-SAME: <2 x half> [[X:%.*]]) {183; CHECK-NEXT: [[CMP:%.*]] = fcmp one <2 x half> [[X]], splat (half 0xH7C00)184; CHECK-NEXT: ret <2 x i1> [[CMP]]185;186 %cmp = fcmp olt <2 x half> %x, <half 0xH7c00, half 0xH7c00>187 ret <2 x i1> %cmp188}189 190define <2 x i1> @oge_ninf_vec(<2 x half> %x) {191; CHECK-LABEL: define <2 x i1> @oge_ninf_vec(192; CHECK-SAME: <2 x half> [[X:%.*]]) {193; CHECK-NEXT: [[CMP:%.*]] = fcmp ord <2 x half> [[X]], zeroinitializer194; CHECK-NEXT: ret <2 x i1> [[CMP]]195;196 %cmp = fcmp oge <2 x half> %x, <half 0xHfc00, half 0xHfc00>197 ret <2 x i1> %cmp198}199 200; Negative tests201 202define i1 @ord_pinf(half %x) {203; CHECK-LABEL: define i1 @ord_pinf(204; CHECK-SAME: half [[X:%.*]]) {205; CHECK-NEXT: [[CMP:%.*]] = fcmp ord half [[X]], 0xH0000206; CHECK-NEXT: ret i1 [[CMP]]207;208 %cmp = fcmp ord half %x, 0xH7c00209 ret i1 %cmp210}211 212define i1 @uno_pinf(half %x) {213; CHECK-LABEL: define i1 @uno_pinf(214; CHECK-SAME: half [[X:%.*]]) {215; CHECK-NEXT: [[CMP:%.*]] = fcmp uno half [[X]], 0xH0000216; CHECK-NEXT: ret i1 [[CMP]]217;218 %cmp = fcmp uno half %x, 0xH7c00219 ret i1 %cmp220}221 222define i1 @true_pinf(half %x) {223; CHECK-LABEL: define i1 @true_pinf(224; CHECK-SAME: half [[X:%.*]]) {225; CHECK-NEXT: ret i1 true226;227 %cmp = fcmp true half %x, 0xH7c00228 ret i1 %cmp229}230 231define i1 @false_pinf(half %x) {232; CHECK-LABEL: define i1 @false_pinf(233; CHECK-SAME: half [[X:%.*]]) {234; CHECK-NEXT: ret i1 false235;236 %cmp = fcmp false half %x, 0xH7c00237 ret i1 %cmp238}239 240define i1 @ord_ninf(half %x) {241; CHECK-LABEL: define i1 @ord_ninf(242; CHECK-SAME: half [[X:%.*]]) {243; CHECK-NEXT: [[CMP:%.*]] = fcmp ord half [[X]], 0xH0000244; CHECK-NEXT: ret i1 [[CMP]]245;246 %cmp = fcmp ord half %x, 0xHfc00247 ret i1 %cmp248}249 250define i1 @uno_ninf(half %x) {251; CHECK-LABEL: define i1 @uno_ninf(252; CHECK-SAME: half [[X:%.*]]) {253; CHECK-NEXT: [[CMP:%.*]] = fcmp uno half [[X]], 0xH0000254; CHECK-NEXT: ret i1 [[CMP]]255;256 %cmp = fcmp uno half %x, 0xHfc00257 ret i1 %cmp258}259 260define i1 @true_ninf(half %x) {261; CHECK-LABEL: define i1 @true_ninf(262; CHECK-SAME: half [[X:%.*]]) {263; CHECK-NEXT: ret i1 true264;265 %cmp = fcmp true half %x, 0xHfc00266 ret i1 %cmp267}268 269define i1 @false_ninf(half %x) {270; CHECK-LABEL: define i1 @false_ninf(271; CHECK-SAME: half [[X:%.*]]) {272; CHECK-NEXT: ret i1 false273;274 %cmp = fcmp false half %x, 0xHfc00275 ret i1 %cmp276}277 278define i1 @olt_one(half %x) {279; CHECK-LABEL: define i1 @olt_one(280; CHECK-SAME: half [[X:%.*]]) {281; CHECK-NEXT: [[CMP:%.*]] = fcmp olt half [[X]], 0xH3C00282; CHECK-NEXT: ret i1 [[CMP]]283;284 %cmp = fcmp olt half %x, 1.0285 ret i1 %cmp286}287