brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · c90b7ee Raw
261 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i1 @floor_x_ole(float %x) {5; CHECK-LABEL: @floor_x_ole(6; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+007; CHECK-NEXT:    ret i1 [[RET]]8;9  %floor = call float @llvm.floor.f32(float %x)10  %ret = fcmp ninf ole float %floor, %x11  ret i1 %ret12}13 14define i1 @floor_x_ule(float %x) {15; CHECK-LABEL: @floor_x_ule(16; CHECK-NEXT:    ret i1 true17;18  %floor = call float @llvm.floor.f32(float %x)19  %ret = fcmp ule float %floor, %x20  ret i1 %ret21}22 23define i1 @floor_x_ogt(float %x) {24; CHECK-LABEL: @floor_x_ogt(25; CHECK-NEXT:    ret i1 false26;27  %floor = call float @llvm.floor.f32(float %x)28  %ret = fcmp ogt float %floor, %x29  ret i1 %ret30}31 32define i1 @floor_x_ugt(float %x) {33; CHECK-LABEL: @floor_x_ugt(34; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+0035; CHECK-NEXT:    ret i1 [[RET]]36;37  %floor = call float @llvm.floor.f32(float %x)38  %ret = fcmp ninf ugt float %floor, %x39  ret i1 %ret40}41 42define i1 @x_floor_oge(float %x) {43; CHECK-LABEL: @x_floor_oge(44; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+0045; CHECK-NEXT:    ret i1 [[RET]]46;47  %floor = call float @llvm.floor.f32(float %x)48  %ret = fcmp ninf oge float %x, %floor49  ret i1 %ret50}51 52define i1 @x_floor_uge(float %x) {53; CHECK-LABEL: @x_floor_uge(54; CHECK-NEXT:    ret i1 true55;56  %floor = call float @llvm.floor.f32(float %x)57  %ret = fcmp uge float %x, %floor58  ret i1 %ret59}60 61define i1 @x_floor_olt(float %x) {62; CHECK-LABEL: @x_floor_olt(63; CHECK-NEXT:    ret i1 false64;65  %floor = call float @llvm.floor.f32(float %x)66  %ret = fcmp olt float %x, %floor67  ret i1 %ret68}69 70define i1 @x_floor_ult(float %x) {71; CHECK-LABEL: @x_floor_ult(72; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+0073; CHECK-NEXT:    ret i1 [[RET]]74;75  %floor = call float @llvm.floor.f32(float %x)76  %ret = fcmp ninf ult float %x, %floor77  ret i1 %ret78}79 80define <2 x i1> @x_floor_olt_vec(<2 x float> %x) {81; CHECK-LABEL: @x_floor_olt_vec(82; CHECK-NEXT:    ret <2 x i1> zeroinitializer83;84  %floor = call <2 x float> @llvm.floor.f32(<2 x float> %x)85  %ret = fcmp olt <2 x float> %x, %floor86  ret <2 x i1> %ret87}88 89define i1 @x_floor_ole_neg(float %x) {90; CHECK-LABEL: @x_floor_ole_neg(91; CHECK-NEXT:    [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]])92; CHECK-NEXT:    [[RET:%.*]] = fcmp ole float [[X]], [[FLOOR]]93; CHECK-NEXT:    ret i1 [[RET]]94;95  %floor = call float @llvm.floor.f32(float %x)96  %ret = fcmp ole float %x, %floor97  ret i1 %ret98}99 100define i1 @x_floor_ogt_neg(float %x) {101; CHECK-LABEL: @x_floor_ogt_neg(102; CHECK-NEXT:    [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]])103; CHECK-NEXT:    [[RET:%.*]] = fcmp ogt float [[X]], [[FLOOR]]104; CHECK-NEXT:    ret i1 [[RET]]105;106  %floor = call float @llvm.floor.f32(float %x)107  %ret = fcmp ogt float %x, %floor108  ret i1 %ret109}110 111define i1 @x_floor_ueq_neg(float %x) {112; CHECK-LABEL: @x_floor_ueq_neg(113; CHECK-NEXT:    [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]])114; CHECK-NEXT:    [[RET:%.*]] = fcmp ueq float [[X]], [[FLOOR]]115; CHECK-NEXT:    ret i1 [[RET]]116;117  %floor = call float @llvm.floor.f32(float %x)118  %ret = fcmp ueq float %x, %floor119  ret i1 %ret120}121 122define i1 @x_floor_une_neg(float %x) {123; CHECK-LABEL: @x_floor_une_neg(124; CHECK-NEXT:    [[FLOOR:%.*]] = call float @llvm.floor.f32(float [[X:%.*]])125; CHECK-NEXT:    [[RET:%.*]] = fcmp une float [[X]], [[FLOOR]]126; CHECK-NEXT:    ret i1 [[RET]]127;128  %floor = call float @llvm.floor.f32(float %x)129  %ret = fcmp une float %x, %floor130  ret i1 %ret131}132 133define i1 @ceil_x_oge(float %x) {134; CHECK-LABEL: @ceil_x_oge(135; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+00136; CHECK-NEXT:    ret i1 [[RET]]137;138  %ceil = call float @llvm.ceil.f32(float %x)139  %ret = fcmp ninf oge float %ceil, %x140  ret i1 %ret141}142 143define i1 @ceil_x_uge(float %x) {144; CHECK-LABEL: @ceil_x_uge(145; CHECK-NEXT:    ret i1 true146;147  %ceil = call float @llvm.ceil.f32(float %x)148  %ret = fcmp uge float %ceil, %x149  ret i1 %ret150}151 152define i1 @ceil_x_olt(float %x) {153; CHECK-LABEL: @ceil_x_olt(154; CHECK-NEXT:    ret i1 false155;156  %ceil = call float @llvm.ceil.f32(float %x)157  %ret = fcmp olt float %ceil, %x158  ret i1 %ret159}160 161define i1 @ceil_x_ult(float %x) {162; CHECK-LABEL: @ceil_x_ult(163; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+00164; CHECK-NEXT:    ret i1 [[RET]]165;166  %ceil = call float @llvm.ceil.f32(float %x)167  %ret = fcmp ninf ult float %ceil, %x168  ret i1 %ret169}170 171define i1 @x_ceil_ole(float %x) {172; CHECK-LABEL: @x_ceil_ole(173; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf ord float [[X:%.*]], 0.000000e+00174; CHECK-NEXT:    ret i1 [[RET]]175;176  %ceil = call float @llvm.ceil.f32(float %x)177  %ret = fcmp ninf ole float %x, %ceil178  ret i1 %ret179}180 181define i1 @x_ceil_ule(float %x) {182; CHECK-LABEL: @x_ceil_ule(183; CHECK-NEXT:    ret i1 true184;185  %ceil = call float @llvm.ceil.f32(float %x)186  %ret = fcmp ule float %x, %ceil187  ret i1 %ret188}189 190define i1 @x_ceil_ogt(float %x) {191; CHECK-LABEL: @x_ceil_ogt(192; CHECK-NEXT:    ret i1 false193;194  %ceil = call float @llvm.ceil.f32(float %x)195  %ret = fcmp ogt float %x, %ceil196  ret i1 %ret197}198 199define i1 @x_ceil_ugt(float %x) {200; CHECK-LABEL: @x_ceil_ugt(201; CHECK-NEXT:    [[RET:%.*]] = fcmp ninf uno float [[X:%.*]], 0.000000e+00202; CHECK-NEXT:    ret i1 [[RET]]203;204  %ceil = call float @llvm.ceil.f32(float %x)205  %ret = fcmp ninf ugt float %x, %ceil206  ret i1 %ret207}208 209define <2 x i1> @x_ceil_ogt_vec(<2 x float> %x) {210; CHECK-LABEL: @x_ceil_ogt_vec(211; CHECK-NEXT:    ret <2 x i1> zeroinitializer212;213  %ceil = call <2 x float> @llvm.ceil.f32(<2 x float> %x)214  %ret = fcmp ogt <2 x float> %x, %ceil215  ret <2 x i1> %ret216}217 218define i1 @x_ceil_oge_neg(float %x) {219; CHECK-LABEL: @x_ceil_oge_neg(220; CHECK-NEXT:    [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]])221; CHECK-NEXT:    [[RET:%.*]] = fcmp oge float [[X]], [[CEIL]]222; CHECK-NEXT:    ret i1 [[RET]]223;224  %ceil = call float @llvm.ceil.f32(float %x)225  %ret = fcmp oge float %x, %ceil226  ret i1 %ret227}228 229define i1 @x_ceil_olt_neg(float %x) {230; CHECK-LABEL: @x_ceil_olt_neg(231; CHECK-NEXT:    [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]])232; CHECK-NEXT:    [[RET:%.*]] = fcmp olt float [[X]], [[CEIL]]233; CHECK-NEXT:    ret i1 [[RET]]234;235  %ceil = call float @llvm.ceil.f32(float %x)236  %ret = fcmp olt float %x, %ceil237  ret i1 %ret238}239 240define i1 @x_ceil_oeq_neg(float %x) {241; CHECK-LABEL: @x_ceil_oeq_neg(242; CHECK-NEXT:    [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]])243; CHECK-NEXT:    [[RET:%.*]] = fcmp oeq float [[X]], [[CEIL]]244; CHECK-NEXT:    ret i1 [[RET]]245;246  %ceil = call float @llvm.ceil.f32(float %x)247  %ret = fcmp oeq float %x, %ceil248  ret i1 %ret249}250 251define i1 @x_ceil_one_neg(float %x) {252; CHECK-LABEL: @x_ceil_one_neg(253; CHECK-NEXT:    [[CEIL:%.*]] = call float @llvm.ceil.f32(float [[X:%.*]])254; CHECK-NEXT:    [[RET:%.*]] = fcmp one float [[X]], [[CEIL]]255; CHECK-NEXT:    ret i1 [[RET]]256;257  %ceil = call float @llvm.ceil.f32(float %x)258  %ret = fcmp one float %x, %ceil259  ret i1 %ret260}261