brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.5 KiB · 635ac73 Raw
1223 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i32 @abs_abs_x01(i32 %x) {5; CHECK-LABEL: @abs_abs_x01(6; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)7; CHECK-NEXT:    ret i32 [[COND]]8;9  %cmp = icmp sgt i32 %x, -110  %sub = sub nsw i32 0, %x11  %cond = select i1 %cmp, i32 %x, i32 %sub12  %cmp1 = icmp sgt i32 %cond, -113  %sub16 = sub nsw i32 0, %cond14  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub1615  ret i32 %cond1816}17 18define <2 x i32> @abs_abs_x01_vec(<2 x i32> %x) {19; CHECK-LABEL: @abs_abs_x01_vec(20; CHECK-NEXT:    [[COND:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true)21; CHECK-NEXT:    ret <2 x i32> [[COND]]22;23  %cmp = icmp sgt <2 x i32> %x, <i32 -1, i32 -1>24  %sub = sub nsw <2 x i32> zeroinitializer, %x25  %cond = select <2 x i1> %cmp, <2 x i32> %x, <2 x i32> %sub26  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>27  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond28  %cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub1629  ret <2 x i32> %cond1830}31 32define i32 @abs_abs_x02(i32 %x) {33; CHECK-LABEL: @abs_abs_x02(34; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)35; CHECK-NEXT:    ret i32 [[COND]]36;37  %cmp = icmp sgt i32 %x, 038  %sub = sub nsw i32 0, %x39  %cond = select i1 %cmp, i32 %x, i32 %sub40  %cmp1 = icmp sgt i32 %cond, -141  %sub16 = sub nsw i32 0, %cond42  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub1643  ret i32 %cond1844}45 46define i32 @abs_abs_x03(i32 %x) {47; CHECK-LABEL: @abs_abs_x03(48; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)49; CHECK-NEXT:    ret i32 [[COND]]50;51  %cmp = icmp slt i32 %x, 052  %sub = sub nsw i32 0, %x53  %cond = select i1 %cmp, i32 %sub, i32 %x54  %cmp1 = icmp sgt i32 %cond, -155  %sub16 = sub nsw i32 0, %cond56  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub1657  ret i32 %cond1858}59 60define i32 @abs_abs_x04(i32 %x) {61; CHECK-LABEL: @abs_abs_x04(62; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)63; CHECK-NEXT:    ret i32 [[COND]]64;65  %cmp = icmp slt i32 %x, 166  %sub = sub nsw i32 0, %x67  %cond = select i1 %cmp, i32 %sub, i32 %x68  %cmp1 = icmp sgt i32 %cond, -169  %sub16 = sub nsw i32 0, %cond70  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub1671  ret i32 %cond1872}73 74define <2 x i32> @abs_abs_x04_vec(<2 x i32> %x) {75; CHECK-LABEL: @abs_abs_x04_vec(76; CHECK-NEXT:    [[COND:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true)77; CHECK-NEXT:    ret <2 x i32> [[COND]]78;79  %cmp = icmp slt <2 x i32> %x, <i32 1, i32 1>80  %sub = sub nsw <2 x i32> zeroinitializer, %x81  %cond = select <2 x i1> %cmp, <2 x i32> %sub, <2 x i32> %x82  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>83  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond84  %cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub1685  ret <2 x i32> %cond1886}87 88define i32 @abs_abs_x05(i32 %x) {89; CHECK-LABEL: @abs_abs_x05(90; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)91; CHECK-NEXT:    ret i32 [[COND]]92;93  %cmp = icmp sgt i32 %x, -194  %sub = sub nsw i32 0, %x95  %cond = select i1 %cmp, i32 %x, i32 %sub96  %cmp1 = icmp sgt i32 %cond, 097  %sub16 = sub nsw i32 0, %cond98  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub1699  ret i32 %cond18100}101 102define i32 @abs_abs_x06(i32 %x) {103; CHECK-LABEL: @abs_abs_x06(104; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)105; CHECK-NEXT:    ret i32 [[COND]]106;107  %cmp = icmp sgt i32 %x, 0108  %sub = sub nsw i32 0, %x109  %cond = select i1 %cmp, i32 %x, i32 %sub110  %cmp1 = icmp sgt i32 %cond, 0111  %sub16 = sub nsw i32 0, %cond112  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16113  ret i32 %cond18114}115 116define i32 @abs_abs_x07(i32 %x) {117; CHECK-LABEL: @abs_abs_x07(118; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)119; CHECK-NEXT:    ret i32 [[COND]]120;121  %cmp = icmp slt i32 %x, 0122  %sub = sub nsw i32 0, %x123  %cond = select i1 %cmp, i32 %sub, i32 %x124  %cmp1 = icmp sgt i32 %cond, 0125  %sub16 = sub nsw i32 0, %cond126  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16127  ret i32 %cond18128}129 130define i32 @abs_abs_x08(i32 %x) {131; CHECK-LABEL: @abs_abs_x08(132; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)133; CHECK-NEXT:    ret i32 [[COND]]134;135  %cmp = icmp slt i32 %x, 1136  %sub = sub nsw i32 0, %x137  %cond = select i1 %cmp, i32 %sub, i32 %x138  %cmp1 = icmp sgt i32 %cond, 0139  %sub16 = sub nsw i32 0, %cond140  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16141  ret i32 %cond18142}143 144define i32 @abs_abs_x09(i32 %x) {145; CHECK-LABEL: @abs_abs_x09(146; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)147; CHECK-NEXT:    ret i32 [[COND]]148;149  %cmp = icmp sgt i32 %x, -1150  %sub = sub nsw i32 0, %x151  %cond = select i1 %cmp, i32 %x, i32 %sub152  %cmp1 = icmp slt i32 %cond, 0153  %sub9 = sub nsw i32 0, %cond154  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond155  ret i32 %cond18156}157 158define i32 @abs_abs_x10(i32 %x) {159; CHECK-LABEL: @abs_abs_x10(160; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)161; CHECK-NEXT:    ret i32 [[COND]]162;163  %cmp = icmp sgt i32 %x, 0164  %sub = sub nsw i32 0, %x165  %cond = select i1 %cmp, i32 %x, i32 %sub166  %cmp1 = icmp slt i32 %cond, 0167  %sub9 = sub nsw i32 0, %cond168  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond169  ret i32 %cond18170}171 172define i32 @abs_abs_x11(i32 %x) {173; CHECK-LABEL: @abs_abs_x11(174; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)175; CHECK-NEXT:    ret i32 [[COND]]176;177  %cmp = icmp slt i32 %x, 0178  %sub = sub nsw i32 0, %x179  %cond = select i1 %cmp, i32 %sub, i32 %x180  %cmp1 = icmp slt i32 %cond, 0181  %sub9 = sub nsw i32 0, %cond182  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond183  ret i32 %cond18184}185 186define i32 @abs_abs_x12(i32 %x) {187; CHECK-LABEL: @abs_abs_x12(188; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)189; CHECK-NEXT:    ret i32 [[COND]]190;191  %cmp = icmp slt i32 %x, 1192  %sub = sub nsw i32 0, %x193  %cond = select i1 %cmp, i32 %sub, i32 %x194  %cmp1 = icmp slt i32 %cond, 0195  %sub9 = sub nsw i32 0, %cond196  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond197  ret i32 %cond18198}199 200define i32 @abs_abs_x13(i32 %x) {201; CHECK-LABEL: @abs_abs_x13(202; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)203; CHECK-NEXT:    ret i32 [[COND]]204;205  %cmp = icmp sgt i32 %x, -1206  %sub = sub nsw i32 0, %x207  %cond = select i1 %cmp, i32 %x, i32 %sub208  %cmp1 = icmp slt i32 %cond, 1209  %sub9 = sub nsw i32 0, %cond210  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond211  ret i32 %cond18212}213 214define i32 @abs_abs_x14(i32 %x) {215; CHECK-LABEL: @abs_abs_x14(216; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)217; CHECK-NEXT:    ret i32 [[COND]]218;219  %cmp = icmp sgt i32 %x, 0220  %sub = sub nsw i32 0, %x221  %cond = select i1 %cmp, i32 %x, i32 %sub222  %cmp1 = icmp slt i32 %cond, 1223  %sub9 = sub nsw i32 0, %cond224  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond225  ret i32 %cond18226}227 228define i32 @abs_abs_x15(i32 %x) {229; CHECK-LABEL: @abs_abs_x15(230; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)231; CHECK-NEXT:    ret i32 [[COND]]232;233  %cmp = icmp slt i32 %x, 0234  %sub = sub nsw i32 0, %x235  %cond = select i1 %cmp, i32 %sub, i32 %x236  %cmp1 = icmp slt i32 %cond, 1237  %sub9 = sub nsw i32 0, %cond238  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond239  ret i32 %cond18240}241 242define i32 @abs_abs_x16(i32 %x) {243; CHECK-LABEL: @abs_abs_x16(244; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)245; CHECK-NEXT:    ret i32 [[COND]]246;247  %cmp = icmp slt i32 %x, 1248  %sub = sub nsw i32 0, %x249  %cond = select i1 %cmp, i32 %sub, i32 %x250  %cmp1 = icmp slt i32 %cond, 1251  %sub9 = sub nsw i32 0, %cond252  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond253  ret i32 %cond18254}255 256; abs(abs(-x)) -> abs(-x) -> abs(x)257define i32 @abs_abs_x17(i32 %x) {258; CHECK-LABEL: @abs_abs_x17(259; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)260; CHECK-NEXT:    ret i32 [[COND]]261;262  %sub = sub nsw i32 0, %x263  %cmp = icmp sgt i32 %sub, -1264  %cond = select i1 %cmp, i32 %sub, i32 %x265  %cmp1 = icmp sgt i32 %cond, -1266  %sub16 = sub nsw i32 0, %cond267  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16268  ret i32 %cond18269}270 271; abs(abs(x - y)) -> abs(x - y)272define i32 @abs_abs_x18(i32 %x, i32 %y) {273; CHECK-LABEL: @abs_abs_x18(274; CHECK-NEXT:    [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]275; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[A]], i1 false)276; CHECK-NEXT:    ret i32 [[COND]]277;278  %a = sub nsw i32 %x, %y279  %b = sub nsw i32 %y, %x280  %cmp = icmp sgt i32 %a, -1281  %cond = select i1 %cmp, i32 %a, i32 %b282  %cmp1 = icmp sgt i32 %cond, -1283  %sub16 = sub nsw i32 0, %cond284  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16285  ret i32 %cond18286}287 288; abs(abs(-x)) -> abs(-x) -> abs(x)289define <2 x i32> @abs_abs_x02_vec(<2 x i32> %x) {290; CHECK-LABEL: @abs_abs_x02_vec(291; CHECK-NEXT:    [[COND:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true)292; CHECK-NEXT:    ret <2 x i32> [[COND]]293;294  %sub = sub nsw <2 x i32> zeroinitializer, %x295  %cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>296  %cond = select <2 x i1> %cmp, <2 x i32> %sub, <2 x i32> %x297  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>298  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond299  %cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16300  ret <2 x i32> %cond18301}302 303; abs(abs(x - y)) -> abs(x - y)304define <2 x i32> @abs_abs_x03_vec(<2 x i32> %x, <2 x i32> %y) {305; CHECK-LABEL: @abs_abs_x03_vec(306; CHECK-NEXT:    [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]307; CHECK-NEXT:    [[COND:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[A]], i1 false)308; CHECK-NEXT:    ret <2 x i32> [[COND]]309;310  %a = sub nsw <2 x i32> %x, %y311  %b = sub nsw <2 x i32> %y, %x312  %cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>313  %cond = select <2 x i1> %cmp, <2 x i32> %a, <2 x i32> %b314  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>315  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond316  %cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16317  ret <2 x i32> %cond18318}319 320define i32 @nabs_nabs_x01(i32 %x) {321; CHECK-LABEL: @nabs_nabs_x01(322; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)323; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]324; CHECK-NEXT:    ret i32 [[COND18]]325;326  %cmp = icmp sgt i32 %x, -1327  %sub = sub nsw i32 0, %x328  %cond = select i1 %cmp, i32 %sub, i32 %x329  %cmp1 = icmp sgt i32 %cond, -1330  %sub9 = sub nsw i32 0, %cond331  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond332  ret i32 %cond18333}334 335define i32 @nabs_nabs_x02(i32 %x) {336; CHECK-LABEL: @nabs_nabs_x02(337; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)338; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]339; CHECK-NEXT:    ret i32 [[COND18]]340;341  %cmp = icmp sgt i32 %x, 0342  %sub = sub nsw i32 0, %x343  %cond = select i1 %cmp, i32 %sub, i32 %x344  %cmp1 = icmp sgt i32 %cond, -1345  %sub9 = sub nsw i32 0, %cond346  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond347  ret i32 %cond18348}349 350define i32 @nabs_nabs_x03(i32 %x) {351; CHECK-LABEL: @nabs_nabs_x03(352; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)353; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]354; CHECK-NEXT:    ret i32 [[COND18]]355;356  %cmp = icmp slt i32 %x, 0357  %sub = sub nsw i32 0, %x358  %cond = select i1 %cmp, i32 %x, i32 %sub359  %cmp1 = icmp sgt i32 %cond, -1360  %sub9 = sub nsw i32 0, %cond361  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond362  ret i32 %cond18363}364 365define i32 @nabs_nabs_x04(i32 %x) {366; CHECK-LABEL: @nabs_nabs_x04(367; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)368; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]369; CHECK-NEXT:    ret i32 [[COND18]]370;371  %cmp = icmp slt i32 %x, 1372  %sub = sub nsw i32 0, %x373  %cond = select i1 %cmp, i32 %x, i32 %sub374  %cmp1 = icmp sgt i32 %cond, -1375  %sub9 = sub nsw i32 0, %cond376  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond377  ret i32 %cond18378}379 380define i32 @nabs_nabs_x05(i32 %x) {381; CHECK-LABEL: @nabs_nabs_x05(382; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)383; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]384; CHECK-NEXT:    ret i32 [[COND18]]385;386  %cmp = icmp sgt i32 %x, -1387  %sub = sub nsw i32 0, %x388  %cond = select i1 %cmp, i32 %sub, i32 %x389  %cmp1 = icmp sgt i32 %cond, 0390  %sub9 = sub nsw i32 0, %cond391  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond392  ret i32 %cond18393}394 395define i32 @nabs_nabs_x06(i32 %x) {396; CHECK-LABEL: @nabs_nabs_x06(397; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)398; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]399; CHECK-NEXT:    ret i32 [[COND18]]400;401  %cmp = icmp sgt i32 %x, 0402  %sub = sub nsw i32 0, %x403  %cond = select i1 %cmp, i32 %sub, i32 %x404  %cmp1 = icmp sgt i32 %cond, 0405  %sub9 = sub nsw i32 0, %cond406  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond407  ret i32 %cond18408}409 410define i32 @nabs_nabs_x07(i32 %x) {411; CHECK-LABEL: @nabs_nabs_x07(412; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)413; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]414; CHECK-NEXT:    ret i32 [[COND18]]415;416  %cmp = icmp slt i32 %x, 0417  %sub = sub nsw i32 0, %x418  %cond = select i1 %cmp, i32 %x, i32 %sub419  %cmp1 = icmp sgt i32 %cond, 0420  %sub9 = sub nsw i32 0, %cond421  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond422  ret i32 %cond18423}424 425define i32 @nabs_nabs_x08(i32 %x) {426; CHECK-LABEL: @nabs_nabs_x08(427; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)428; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]429; CHECK-NEXT:    ret i32 [[COND18]]430;431  %cmp = icmp slt i32 %x, 1432  %sub = sub nsw i32 0, %x433  %cond = select i1 %cmp, i32 %x, i32 %sub434  %cmp1 = icmp sgt i32 %cond, 0435  %sub9 = sub nsw i32 0, %cond436  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond437  ret i32 %cond18438}439 440define i32 @nabs_nabs_x09(i32 %x) {441; CHECK-LABEL: @nabs_nabs_x09(442; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)443; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]444; CHECK-NEXT:    ret i32 [[COND18]]445;446  %cmp = icmp sgt i32 %x, -1447  %sub = sub nsw i32 0, %x448  %cond = select i1 %cmp, i32 %sub, i32 %x449  %cmp1 = icmp slt i32 %cond, 0450  %sub16 = sub nsw i32 0, %cond451  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16452  ret i32 %cond18453}454 455define i32 @nabs_nabs_x10(i32 %x) {456; CHECK-LABEL: @nabs_nabs_x10(457; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)458; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]459; CHECK-NEXT:    ret i32 [[COND18]]460;461  %cmp = icmp sgt i32 %x, 0462  %sub = sub nsw i32 0, %x463  %cond = select i1 %cmp, i32 %sub, i32 %x464  %cmp1 = icmp slt i32 %cond, 0465  %sub16 = sub nsw i32 0, %cond466  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16467  ret i32 %cond18468}469 470define i32 @nabs_nabs_x11(i32 %x) {471; CHECK-LABEL: @nabs_nabs_x11(472; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)473; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]474; CHECK-NEXT:    ret i32 [[COND18]]475;476  %cmp = icmp slt i32 %x, 0477  %sub = sub nsw i32 0, %x478  %cond = select i1 %cmp, i32 %x, i32 %sub479  %cmp1 = icmp slt i32 %cond, 0480  %sub16 = sub nsw i32 0, %cond481  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16482  ret i32 %cond18483}484 485define i32 @nabs_nabs_x12(i32 %x) {486; CHECK-LABEL: @nabs_nabs_x12(487; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)488; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]489; CHECK-NEXT:    ret i32 [[COND18]]490;491  %cmp = icmp slt i32 %x, 1492  %sub = sub nsw i32 0, %x493  %cond = select i1 %cmp, i32 %x, i32 %sub494  %cmp1 = icmp slt i32 %cond, 0495  %sub16 = sub nsw i32 0, %cond496  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16497  ret i32 %cond18498}499 500define i32 @nabs_nabs_x13(i32 %x) {501; CHECK-LABEL: @nabs_nabs_x13(502; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)503; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]504; CHECK-NEXT:    ret i32 [[COND18]]505;506  %cmp = icmp sgt i32 %x, -1507  %sub = sub nsw i32 0, %x508  %cond = select i1 %cmp, i32 %sub, i32 %x509  %cmp1 = icmp slt i32 %cond, 1510  %sub16 = sub nsw i32 0, %cond511  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16512  ret i32 %cond18513}514 515define i32 @nabs_nabs_x14(i32 %x) {516; CHECK-LABEL: @nabs_nabs_x14(517; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)518; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]519; CHECK-NEXT:    ret i32 [[COND18]]520;521  %cmp = icmp sgt i32 %x, 0522  %sub = sub nsw i32 0, %x523  %cond = select i1 %cmp, i32 %sub, i32 %x524  %cmp1 = icmp slt i32 %cond, 1525  %sub16 = sub nsw i32 0, %cond526  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16527  ret i32 %cond18528}529 530define i32 @nabs_nabs_x15(i32 %x) {531; CHECK-LABEL: @nabs_nabs_x15(532; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)533; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]534; CHECK-NEXT:    ret i32 [[COND18]]535;536  %cmp = icmp slt i32 %x, 0537  %sub = sub nsw i32 0, %x538  %cond = select i1 %cmp, i32 %x, i32 %sub539  %cmp1 = icmp slt i32 %cond, 1540  %sub16 = sub nsw i32 0, %cond541  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16542  ret i32 %cond18543}544 545define i32 @nabs_nabs_x16(i32 %x) {546; CHECK-LABEL: @nabs_nabs_x16(547; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)548; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]549; CHECK-NEXT:    ret i32 [[COND18]]550;551  %cmp = icmp slt i32 %x, 1552  %sub = sub nsw i32 0, %x553  %cond = select i1 %cmp, i32 %x, i32 %sub554  %cmp1 = icmp slt i32 %cond, 1555  %sub16 = sub nsw i32 0, %cond556  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16557  ret i32 %cond18558}559 560; nabs(nabs(-x)) -> nabs(-x) -> nabs(x)561define i32 @nabs_nabs_x17(i32 %x) {562; CHECK-LABEL: @nabs_nabs_x17(563; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)564; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]565; CHECK-NEXT:    ret i32 [[COND18]]566;567  %sub = sub nsw i32 0, %x568  %cmp = icmp sgt i32 %sub, -1569  %cond = select i1 %cmp, i32 %x, i32 %sub570  %cmp1 = icmp sgt i32 %cond, -1571  %sub16 = sub nsw i32 0, %cond572  %cond18 = select i1 %cmp1, i32 %sub16, i32 %cond573  ret i32 %cond18574}575 576; nabs(nabs(x - y)) -> nabs(x - y)577define i32 @nabs_nabs_x18(i32 %x, i32 %y) {578; CHECK-LABEL: @nabs_nabs_x18(579; CHECK-NEXT:    [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]580; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[A]], i1 false)581; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[TMP1]]582; CHECK-NEXT:    ret i32 [[COND18]]583;584  %a = sub nsw i32 %x, %y585  %b = sub nsw i32 %y, %x586  %cmp = icmp sgt i32 %a, -1587  %cond = select i1 %cmp, i32 %b, i32 %a588  %cmp1 = icmp sgt i32 %cond, -1589  %sub16 = sub nsw i32 0, %cond590  %cond18 = select i1 %cmp1, i32 %sub16, i32 %cond591  ret i32 %cond18592}593 594; nabs(nabs(-x)) -> nabs(-x) -> nabs(x)595define <2 x i32> @nabs_nabs_x01_vec(<2 x i32> %x) {596; CHECK-LABEL: @nabs_nabs_x01_vec(597; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 false)598; CHECK-NEXT:    [[COND18:%.*]] = sub <2 x i32> zeroinitializer, [[TMP1]]599; CHECK-NEXT:    ret <2 x i32> [[COND18]]600;601  %sub = sub nsw <2 x i32> zeroinitializer, %x602  %cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>603  %cond = select <2 x i1> %cmp, <2 x i32> %x, <2 x i32> %sub604  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>605  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond606  %cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond607  ret <2 x i32> %cond18608}609 610; nabs(nabs(x - y)) -> nabs(x - y)611define <2 x i32> @nabs_nabs_x02_vec(<2 x i32> %x, <2 x i32> %y) {612; CHECK-LABEL: @nabs_nabs_x02_vec(613; CHECK-NEXT:    [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]614; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[A]], i1 false)615; CHECK-NEXT:    [[COND18:%.*]] = sub <2 x i32> zeroinitializer, [[TMP1]]616; CHECK-NEXT:    ret <2 x i32> [[COND18]]617;618  %a = sub nsw <2 x i32> %x, %y619  %b = sub nsw <2 x i32> %y, %x620  %cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>621  %cond = select <2 x i1> %cmp, <2 x i32> %b, <2 x i32> %a622  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>623  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond624  %cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond625  ret <2 x i32> %cond18626}627 628define i32 @abs_nabs_x01(i32 %x) {629; CHECK-LABEL: @abs_nabs_x01(630; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)631; CHECK-NEXT:    ret i32 [[TMP1]]632;633  %cmp = icmp sgt i32 %x, -1634  %sub = sub nsw i32 0, %x635  %cond = select i1 %cmp, i32 %sub, i32 %x636  %cmp1 = icmp sgt i32 %cond, -1637  %sub16 = sub nsw i32 0, %cond638  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16639  ret i32 %cond18640}641 642define i32 @abs_nabs_x02(i32 %x) {643; CHECK-LABEL: @abs_nabs_x02(644; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)645; CHECK-NEXT:    ret i32 [[TMP1]]646;647  %cmp = icmp sgt i32 %x, 0648  %sub = sub nsw i32 0, %x649  %cond = select i1 %cmp, i32 %sub, i32 %x650  %cmp1 = icmp sgt i32 %cond, -1651  %sub16 = sub nsw i32 0, %cond652  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16653  ret i32 %cond18654}655 656define i32 @abs_nabs_x03(i32 %x) {657; CHECK-LABEL: @abs_nabs_x03(658; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)659; CHECK-NEXT:    ret i32 [[TMP1]]660;661  %cmp = icmp slt i32 %x, 0662  %sub = sub nsw i32 0, %x663  %cond = select i1 %cmp, i32 %x, i32 %sub664  %cmp1 = icmp sgt i32 %cond, -1665  %sub16 = sub nsw i32 0, %cond666  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16667  ret i32 %cond18668}669 670define i32 @abs_nabs_x04(i32 %x) {671; CHECK-LABEL: @abs_nabs_x04(672; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)673; CHECK-NEXT:    ret i32 [[TMP1]]674;675  %cmp = icmp slt i32 %x, 1676  %sub = sub nsw i32 0, %x677  %cond = select i1 %cmp, i32 %x, i32 %sub678  %cmp1 = icmp sgt i32 %cond, -1679  %sub16 = sub nsw i32 0, %cond680  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16681  ret i32 %cond18682}683 684define i32 @abs_nabs_x05(i32 %x) {685; CHECK-LABEL: @abs_nabs_x05(686; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)687; CHECK-NEXT:    ret i32 [[TMP1]]688;689  %cmp = icmp sgt i32 %x, -1690  %sub = sub nsw i32 0, %x691  %cond = select i1 %cmp, i32 %sub, i32 %x692  %cmp1 = icmp sgt i32 %cond, 0693  %sub16 = sub nsw i32 0, %cond694  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16695  ret i32 %cond18696}697 698define i32 @abs_nabs_x06(i32 %x) {699; CHECK-LABEL: @abs_nabs_x06(700; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)701; CHECK-NEXT:    ret i32 [[TMP1]]702;703  %cmp = icmp sgt i32 %x, 0704  %sub = sub nsw i32 0, %x705  %cond = select i1 %cmp, i32 %sub, i32 %x706  %cmp1 = icmp sgt i32 %cond, 0707  %sub16 = sub nsw i32 0, %cond708  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16709  ret i32 %cond18710}711 712define i32 @abs_nabs_x07(i32 %x) {713; CHECK-LABEL: @abs_nabs_x07(714; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)715; CHECK-NEXT:    ret i32 [[TMP1]]716;717  %cmp = icmp slt i32 %x, 0718  %sub = sub nsw i32 0, %x719  %cond = select i1 %cmp, i32 %x, i32 %sub720  %cmp1 = icmp sgt i32 %cond, 0721  %sub16 = sub nsw i32 0, %cond722  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16723  ret i32 %cond18724}725 726define i32 @abs_nabs_x08(i32 %x) {727; CHECK-LABEL: @abs_nabs_x08(728; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)729; CHECK-NEXT:    ret i32 [[TMP1]]730;731  %cmp = icmp slt i32 %x, 1732  %sub = sub nsw i32 0, %x733  %cond = select i1 %cmp, i32 %x, i32 %sub734  %cmp1 = icmp sgt i32 %cond, 0735  %sub16 = sub nsw i32 0, %cond736  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16737  ret i32 %cond18738}739 740define i32 @abs_nabs_x09(i32 %x) {741; CHECK-LABEL: @abs_nabs_x09(742; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)743; CHECK-NEXT:    ret i32 [[TMP1]]744;745  %cmp = icmp sgt i32 %x, -1746  %sub = sub nsw i32 0, %x747  %cond = select i1 %cmp, i32 %sub, i32 %x748  %cmp1 = icmp slt i32 %cond, 0749  %sub9 = sub nsw i32 0, %cond750  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond751  ret i32 %cond18752}753 754define i32 @abs_nabs_x10(i32 %x) {755; CHECK-LABEL: @abs_nabs_x10(756; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)757; CHECK-NEXT:    ret i32 [[TMP1]]758;759  %cmp = icmp sgt i32 %x, 0760  %sub = sub nsw i32 0, %x761  %cond = select i1 %cmp, i32 %sub, i32 %x762  %cmp1 = icmp slt i32 %cond, 0763  %sub9 = sub nsw i32 0, %cond764  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond765  ret i32 %cond18766}767 768define i32 @abs_nabs_x11(i32 %x) {769; CHECK-LABEL: @abs_nabs_x11(770; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)771; CHECK-NEXT:    ret i32 [[TMP1]]772;773  %cmp = icmp slt i32 %x, 0774  %sub = sub nsw i32 0, %x775  %cond = select i1 %cmp, i32 %x, i32 %sub776  %cmp1 = icmp slt i32 %cond, 0777  %sub9 = sub nsw i32 0, %cond778  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond779  ret i32 %cond18780}781 782define i32 @abs_nabs_x12(i32 %x) {783; CHECK-LABEL: @abs_nabs_x12(784; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)785; CHECK-NEXT:    ret i32 [[TMP1]]786;787  %cmp = icmp slt i32 %x, 1788  %sub = sub nsw i32 0, %x789  %cond = select i1 %cmp, i32 %x, i32 %sub790  %cmp1 = icmp slt i32 %cond, 0791  %sub9 = sub nsw i32 0, %cond792  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond793  ret i32 %cond18794}795 796define i32 @abs_nabs_x13(i32 %x) {797; CHECK-LABEL: @abs_nabs_x13(798; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)799; CHECK-NEXT:    ret i32 [[TMP1]]800;801  %cmp = icmp sgt i32 %x, -1802  %sub = sub nsw i32 0, %x803  %cond = select i1 %cmp, i32 %sub, i32 %x804  %cmp1 = icmp slt i32 %cond, 1805  %sub9 = sub nsw i32 0, %cond806  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond807  ret i32 %cond18808}809 810define i32 @abs_nabs_x14(i32 %x) {811; CHECK-LABEL: @abs_nabs_x14(812; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)813; CHECK-NEXT:    ret i32 [[TMP1]]814;815  %cmp = icmp sgt i32 %x, 0816  %sub = sub nsw i32 0, %x817  %cond = select i1 %cmp, i32 %sub, i32 %x818  %cmp1 = icmp slt i32 %cond, 1819  %sub9 = sub nsw i32 0, %cond820  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond821  ret i32 %cond18822}823 824define i32 @abs_nabs_x15(i32 %x) {825; CHECK-LABEL: @abs_nabs_x15(826; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)827; CHECK-NEXT:    ret i32 [[TMP1]]828;829  %cmp = icmp slt i32 %x, 0830  %sub = sub nsw i32 0, %x831  %cond = select i1 %cmp, i32 %x, i32 %sub832  %cmp1 = icmp slt i32 %cond, 1833  %sub9 = sub nsw i32 0, %cond834  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond835  ret i32 %cond18836}837 838define i32 @abs_nabs_x16(i32 %x) {839; CHECK-LABEL: @abs_nabs_x16(840; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)841; CHECK-NEXT:    ret i32 [[TMP1]]842;843  %cmp = icmp slt i32 %x, 1844  %sub = sub nsw i32 0, %x845  %cond = select i1 %cmp, i32 %x, i32 %sub846  %cmp1 = icmp slt i32 %cond, 1847  %sub9 = sub nsw i32 0, %cond848  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond849  ret i32 %cond18850}851 852; abs(nabs(-x)) -> abs(-x) -> abs(x)853define i32 @abs_nabs_x17(i32 %x) {854; CHECK-LABEL: @abs_nabs_x17(855; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false)856; CHECK-NEXT:    ret i32 [[TMP1]]857;858  %sub = sub nsw i32 0, %x859  %cmp = icmp sgt i32 %sub, -1860  %cond = select i1 %cmp, i32 %x, i32 %sub861  %cmp1 = icmp sgt i32 %cond, -1862  %sub16 = sub nsw i32 0, %cond863  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16864  ret i32 %cond18865}866 867; abs(nabs(x - y)) -> abs(x - y)868define i32 @abs_nabs_x18(i32 %x, i32 %y) {869; CHECK-LABEL: @abs_nabs_x18(870; CHECK-NEXT:    [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]871; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.abs.i32(i32 [[A]], i1 false)872; CHECK-NEXT:    ret i32 [[TMP1]]873;874  %a = sub nsw i32 %x, %y875  %b = sub nsw i32 %y, %x876  %cmp = icmp sgt i32 %a, -1877  %cond = select i1 %cmp, i32 %b, i32 %a878  %cmp1 = icmp sgt i32 %cond, -1879  %sub16 = sub nsw i32 0, %cond880  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub16881  ret i32 %cond18882}883 884; abs(nabs(-x)) -> abs(-x) -> abs(x)885define <2 x i32> @abs_nabs_x01_vec(<2 x i32> %x) {886; CHECK-LABEL: @abs_nabs_x01_vec(887; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 false)888; CHECK-NEXT:    ret <2 x i32> [[TMP1]]889;890  %sub = sub nsw <2 x i32> zeroinitializer, %x891  %cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>892  %cond = select <2 x i1> %cmp, <2 x i32> %x, <2 x i32> %sub893  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>894  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond895  %cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16896  ret <2 x i32> %cond18897}898 899; abs(nabs(x - y)) -> abs(x - y)900define <2 x i32> @abs_nabs_x02_vec(<2 x i32> %x, <2 x i32> %y) {901; CHECK-LABEL: @abs_nabs_x02_vec(902; CHECK-NEXT:    [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]903; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[A]], i1 false)904; CHECK-NEXT:    ret <2 x i32> [[TMP1]]905;906  %a = sub nsw <2 x i32> %x, %y907  %b = sub nsw <2 x i32> %y, %x908  %cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>909  %cond = select <2 x i1> %cmp, <2 x i32> %b, <2 x i32> %a910  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>911  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond912  %cond18 = select <2 x i1> %cmp1, <2 x i32> %cond, <2 x i32> %sub16913  ret <2 x i32> %cond18914}915 916define i32 @nabs_abs_x01(i32 %x) {917; CHECK-LABEL: @nabs_abs_x01(918; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)919; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]920; CHECK-NEXT:    ret i32 [[SUB9]]921;922  %cmp = icmp sgt i32 %x, -1923  %sub = sub nsw i32 0, %x924  %cond = select i1 %cmp, i32 %x, i32 %sub925  %cmp1 = icmp sgt i32 %cond, -1926  %sub9 = sub nsw i32 0, %cond927  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond928  ret i32 %cond18929}930 931define i32 @nabs_abs_x02(i32 %x) {932; CHECK-LABEL: @nabs_abs_x02(933; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)934; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]935; CHECK-NEXT:    ret i32 [[SUB9]]936;937  %cmp = icmp sgt i32 %x, 0938  %sub = sub nsw i32 0, %x939  %cond = select i1 %cmp, i32 %x, i32 %sub940  %cmp1 = icmp sgt i32 %cond, -1941  %sub9 = sub nsw i32 0, %cond942  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond943  ret i32 %cond18944}945 946define i32 @nabs_abs_x03(i32 %x) {947; CHECK-LABEL: @nabs_abs_x03(948; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)949; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]950; CHECK-NEXT:    ret i32 [[SUB9]]951;952  %cmp = icmp slt i32 %x, 0953  %sub = sub nsw i32 0, %x954  %cond = select i1 %cmp, i32 %sub, i32 %x955  %cmp1 = icmp sgt i32 %cond, -1956  %sub9 = sub nsw i32 0, %cond957  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond958  ret i32 %cond18959}960 961define i32 @nabs_abs_x04(i32 %x) {962; CHECK-LABEL: @nabs_abs_x04(963; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)964; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]965; CHECK-NEXT:    ret i32 [[SUB9]]966;967  %cmp = icmp slt i32 %x, 1968  %sub = sub nsw i32 0, %x969  %cond = select i1 %cmp, i32 %sub, i32 %x970  %cmp1 = icmp sgt i32 %cond, -1971  %sub9 = sub nsw i32 0, %cond972  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond973  ret i32 %cond18974}975 976define i32 @nabs_abs_x05(i32 %x) {977; CHECK-LABEL: @nabs_abs_x05(978; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)979; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]980; CHECK-NEXT:    ret i32 [[SUB9]]981;982  %cmp = icmp sgt i32 %x, -1983  %sub = sub nsw i32 0, %x984  %cond = select i1 %cmp, i32 %x, i32 %sub985  %cmp1 = icmp sgt i32 %cond, 0986  %sub9 = sub nsw i32 0, %cond987  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond988  ret i32 %cond18989}990 991define i32 @nabs_abs_x06(i32 %x) {992; CHECK-LABEL: @nabs_abs_x06(993; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)994; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]995; CHECK-NEXT:    ret i32 [[SUB9]]996;997  %cmp = icmp sgt i32 %x, 0998  %sub = sub nsw i32 0, %x999  %cond = select i1 %cmp, i32 %x, i32 %sub1000  %cmp1 = icmp sgt i32 %cond, 01001  %sub9 = sub nsw i32 0, %cond1002  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond1003  ret i32 %cond181004}1005 1006define i32 @nabs_abs_x07(i32 %x) {1007; CHECK-LABEL: @nabs_abs_x07(1008; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1009; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]1010; CHECK-NEXT:    ret i32 [[SUB9]]1011;1012  %cmp = icmp slt i32 %x, 01013  %sub = sub nsw i32 0, %x1014  %cond = select i1 %cmp, i32 %sub, i32 %x1015  %cmp1 = icmp sgt i32 %cond, 01016  %sub9 = sub nsw i32 0, %cond1017  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond1018  ret i32 %cond181019}1020 1021define i32 @nabs_abs_x08(i32 %x) {1022; CHECK-LABEL: @nabs_abs_x08(1023; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1024; CHECK-NEXT:    [[SUB9:%.*]] = sub nsw i32 0, [[COND]]1025; CHECK-NEXT:    ret i32 [[SUB9]]1026;1027  %cmp = icmp slt i32 %x, 11028  %sub = sub nsw i32 0, %x1029  %cond = select i1 %cmp, i32 %sub, i32 %x1030  %cmp1 = icmp sgt i32 %cond, 01031  %sub9 = sub nsw i32 0, %cond1032  %cond18 = select i1 %cmp1, i32 %sub9, i32 %cond1033  ret i32 %cond181034}1035 1036define i32 @nabs_abs_x09(i32 %x) {1037; CHECK-LABEL: @nabs_abs_x09(1038; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1039; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1040; CHECK-NEXT:    ret i32 [[SUB16]]1041;1042  %cmp = icmp sgt i32 %x, -11043  %sub = sub nsw i32 0, %x1044  %cond = select i1 %cmp, i32 %x, i32 %sub1045  %cmp1 = icmp slt i32 %cond, 01046  %sub16 = sub nsw i32 0, %cond1047  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161048  ret i32 %cond181049}1050 1051define i32 @nabs_abs_x10(i32 %x) {1052; CHECK-LABEL: @nabs_abs_x10(1053; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1054; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1055; CHECK-NEXT:    ret i32 [[SUB16]]1056;1057  %cmp = icmp sgt i32 %x, 01058  %sub = sub nsw i32 0, %x1059  %cond = select i1 %cmp, i32 %x, i32 %sub1060  %cmp1 = icmp slt i32 %cond, 01061  %sub16 = sub nsw i32 0, %cond1062  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161063  ret i32 %cond181064}1065 1066define i32 @nabs_abs_x11(i32 %x) {1067; CHECK-LABEL: @nabs_abs_x11(1068; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1069; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1070; CHECK-NEXT:    ret i32 [[SUB16]]1071;1072  %cmp = icmp slt i32 %x, 01073  %sub = sub nsw i32 0, %x1074  %cond = select i1 %cmp, i32 %sub, i32 %x1075  %cmp1 = icmp slt i32 %cond, 01076  %sub16 = sub nsw i32 0, %cond1077  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161078  ret i32 %cond181079}1080 1081define i32 @nabs_abs_x12(i32 %x) {1082; CHECK-LABEL: @nabs_abs_x12(1083; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1084; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1085; CHECK-NEXT:    ret i32 [[SUB16]]1086;1087  %cmp = icmp slt i32 %x, 11088  %sub = sub nsw i32 0, %x1089  %cond = select i1 %cmp, i32 %sub, i32 %x1090  %cmp1 = icmp slt i32 %cond, 01091  %sub16 = sub nsw i32 0, %cond1092  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161093  ret i32 %cond181094}1095 1096define i32 @nabs_abs_x13(i32 %x) {1097; CHECK-LABEL: @nabs_abs_x13(1098; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1099; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1100; CHECK-NEXT:    ret i32 [[SUB16]]1101;1102  %cmp = icmp sgt i32 %x, -11103  %sub = sub nsw i32 0, %x1104  %cond = select i1 %cmp, i32 %x, i32 %sub1105  %cmp1 = icmp slt i32 %cond, 11106  %sub16 = sub nsw i32 0, %cond1107  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161108  ret i32 %cond181109}1110 1111define i32 @nabs_abs_x14(i32 %x) {1112; CHECK-LABEL: @nabs_abs_x14(1113; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1114; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1115; CHECK-NEXT:    ret i32 [[SUB16]]1116;1117  %cmp = icmp sgt i32 %x, 01118  %sub = sub nsw i32 0, %x1119  %cond = select i1 %cmp, i32 %x, i32 %sub1120  %cmp1 = icmp slt i32 %cond, 11121  %sub16 = sub nsw i32 0, %cond1122  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161123  ret i32 %cond181124}1125 1126define i32 @nabs_abs_x15(i32 %x) {1127; CHECK-LABEL: @nabs_abs_x15(1128; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1129; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1130; CHECK-NEXT:    ret i32 [[SUB16]]1131;1132  %cmp = icmp slt i32 %x, 01133  %sub = sub nsw i32 0, %x1134  %cond = select i1 %cmp, i32 %sub, i32 %x1135  %cmp1 = icmp slt i32 %cond, 11136  %sub16 = sub nsw i32 0, %cond1137  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161138  ret i32 %cond181139}1140 1141define i32 @nabs_abs_x16(i32 %x) {1142; CHECK-LABEL: @nabs_abs_x16(1143; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1144; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1145; CHECK-NEXT:    ret i32 [[SUB16]]1146;1147  %cmp = icmp slt i32 %x, 11148  %sub = sub nsw i32 0, %x1149  %cond = select i1 %cmp, i32 %sub, i32 %x1150  %cmp1 = icmp slt i32 %cond, 11151  %sub16 = sub nsw i32 0, %cond1152  %cond18 = select i1 %cmp1, i32 %cond, i32 %sub161153  ret i32 %cond181154}1155 1156; nabs(abs(-x)) -> nabs(-x) -> nabs(x)1157define i32 @nabs_abs_x17(i32 %x) {1158; CHECK-LABEL: @nabs_abs_x17(1159; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)1160; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw i32 0, [[COND]]1161; CHECK-NEXT:    ret i32 [[SUB16]]1162;1163  %sub = sub nsw i32 0, %x1164  %cmp = icmp sgt i32 %sub, -11165  %cond = select i1 %cmp, i32 %sub, i32 %x1166  %cmp1 = icmp sgt i32 %cond, -11167  %sub16 = sub nsw i32 0, %cond1168  %cond18 = select i1 %cmp1, i32 %sub16, i32 %cond1169  ret i32 %cond181170}1171 1172; nabs(abs(x - y)) -> nabs(x - y)1173define i32 @nabs_abs_x18(i32 %x, i32 %y) {1174; CHECK-LABEL: @nabs_abs_x18(1175; CHECK-NEXT:    [[A:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]1176; CHECK-NEXT:    [[COND:%.*]] = call i32 @llvm.abs.i32(i32 [[A]], i1 false)1177; CHECK-NEXT:    [[COND18:%.*]] = sub i32 0, [[COND]]1178; CHECK-NEXT:    ret i32 [[COND18]]1179;1180  %a = sub nsw i32 %x, %y1181  %b = sub nsw i32 %y, %x1182  %cmp = icmp sgt i32 %a, -11183  %cond = select i1 %cmp, i32 %a, i32 %b1184  %cmp1 = icmp sgt i32 %cond, -11185  %sub16 = sub nsw i32 0, %cond1186  %cond18 = select i1 %cmp1, i32 %sub16, i32 %cond1187  ret i32 %cond181188}1189 1190; nabs(abs(-x)) -> nabs(-x) -> nabs(x)1191define <2 x i32> @nabs_abs_x01_vec(<2 x i32> %x) {1192; CHECK-LABEL: @nabs_abs_x01_vec(1193; CHECK-NEXT:    [[COND:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[X:%.*]], i1 true)1194; CHECK-NEXT:    [[SUB16:%.*]] = sub nsw <2 x i32> zeroinitializer, [[COND]]1195; CHECK-NEXT:    ret <2 x i32> [[SUB16]]1196;1197  %sub = sub nsw <2 x i32> zeroinitializer, %x1198  %cmp = icmp sgt <2 x i32> %sub, <i32 -1, i32 -1>1199  %cond = select <2 x i1> %cmp, <2 x i32> %sub, <2 x i32> %x1200  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>1201  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond1202  %cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond1203  ret <2 x i32> %cond181204}1205 1206; nabs(abs(x - y)) -> nabs(x - y)1207define <2 x i32> @nabs_abs_x02_vec(<2 x i32> %x, <2 x i32> %y) {1208; CHECK-LABEL: @nabs_abs_x02_vec(1209; CHECK-NEXT:    [[A:%.*]] = sub nsw <2 x i32> [[X:%.*]], [[Y:%.*]]1210; CHECK-NEXT:    [[COND:%.*]] = call <2 x i32> @llvm.abs.v2i32(<2 x i32> [[A]], i1 false)1211; CHECK-NEXT:    [[COND18:%.*]] = sub <2 x i32> zeroinitializer, [[COND]]1212; CHECK-NEXT:    ret <2 x i32> [[COND18]]1213;1214  %a = sub nsw <2 x i32> %x, %y1215  %b = sub nsw <2 x i32> %y, %x1216  %cmp = icmp sgt <2 x i32> %a, <i32 -1, i32 -1>1217  %cond = select <2 x i1> %cmp, <2 x i32> %a, <2 x i32> %b1218  %cmp1 = icmp sgt <2 x i32> %cond, <i32 -1, i32 -1>1219  %sub16 = sub nsw <2 x i32> zeroinitializer, %cond1220  %cond18 = select <2 x i1> %cmp1, <2 x i32> %sub16, <2 x i32> %cond1221  ret <2 x i32> %cond181222}1223