1*11b41910SDávid Bolvanský; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2b280ee1dSBjorn Pettersson; RUN: opt -passes=instsimplify -S < %s | FileCheck %s 3cee313d2SEric Christopher 4cee313d2SEric Christopherdefine i64 @test0() { 5cee313d2SEric Christopher; CHECK-LABEL: @test0( 6*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 7cee313d2SEric Christopher; 8cee313d2SEric Christopher %r = mul i64 undef, undef 9cee313d2SEric Christopher ret i64 %r 10cee313d2SEric Christopher} 11cee313d2SEric Christopher 12cee313d2SEric Christopherdefine i64 @test1() { 13cee313d2SEric Christopher; CHECK-LABEL: @test1( 14*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 15cee313d2SEric Christopher; 16cee313d2SEric Christopher %r = mul i64 3, undef 17cee313d2SEric Christopher ret i64 %r 18cee313d2SEric Christopher} 19cee313d2SEric Christopher 20cee313d2SEric Christopherdefine i64 @test2() { 21cee313d2SEric Christopher; CHECK-LABEL: @test2( 22*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 23cee313d2SEric Christopher; 24cee313d2SEric Christopher %r = mul i64 undef, 3 25cee313d2SEric Christopher ret i64 %r 26cee313d2SEric Christopher} 27cee313d2SEric Christopher 28cee313d2SEric Christopherdefine i64 @test3() { 29cee313d2SEric Christopher; CHECK-LABEL: @test3( 30*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 0 31cee313d2SEric Christopher; 32cee313d2SEric Christopher %r = mul i64 undef, 6 33cee313d2SEric Christopher ret i64 %r 34cee313d2SEric Christopher} 35cee313d2SEric Christopher 36cee313d2SEric Christopherdefine i64 @test4() { 37cee313d2SEric Christopher; CHECK-LABEL: @test4( 38*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 0 39cee313d2SEric Christopher; 40cee313d2SEric Christopher %r = mul i64 6, undef 41cee313d2SEric Christopher ret i64 %r 42cee313d2SEric Christopher} 43cee313d2SEric Christopher 44cee313d2SEric Christopherdefine i64 @test5() { 45cee313d2SEric Christopher; CHECK-LABEL: @test5( 46*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 47cee313d2SEric Christopher; 48cee313d2SEric Christopher %r = and i64 undef, undef 49cee313d2SEric Christopher ret i64 %r 50cee313d2SEric Christopher} 51cee313d2SEric Christopher 52cee313d2SEric Christopherdefine i64 @test6() { 53cee313d2SEric Christopher; CHECK-LABEL: @test6( 54*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 55cee313d2SEric Christopher; 56cee313d2SEric Christopher %r = or i64 undef, undef 57cee313d2SEric Christopher ret i64 %r 58cee313d2SEric Christopher} 59cee313d2SEric Christopher 60cee313d2SEric Christopherdefine i64 @test7() { 61cee313d2SEric Christopher; CHECK-LABEL: @test7( 62*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 63cee313d2SEric Christopher; 64cee313d2SEric Christopher %r = udiv i64 undef, 1 65cee313d2SEric Christopher ret i64 %r 66cee313d2SEric Christopher} 67cee313d2SEric Christopher 68cee313d2SEric Christopherdefine i64 @test8() { 69cee313d2SEric Christopher; CHECK-LABEL: @test8( 70*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 71cee313d2SEric Christopher; 72cee313d2SEric Christopher %r = sdiv i64 undef, 1 73cee313d2SEric Christopher ret i64 %r 74cee313d2SEric Christopher} 75cee313d2SEric Christopher 76cee313d2SEric Christopherdefine i64 @test9() { 77cee313d2SEric Christopher; CHECK-LABEL: @test9( 78*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 0 79cee313d2SEric Christopher; 80cee313d2SEric Christopher %r = urem i64 undef, 1 81cee313d2SEric Christopher ret i64 %r 82cee313d2SEric Christopher} 83cee313d2SEric Christopher 84cee313d2SEric Christopherdefine i64 @test10() { 85cee313d2SEric Christopher; CHECK-LABEL: @test10( 86*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 0 87cee313d2SEric Christopher; 88cee313d2SEric Christopher %r = srem i64 undef, 1 89cee313d2SEric Christopher ret i64 %r 90cee313d2SEric Christopher} 91cee313d2SEric Christopher 92cee313d2SEric Christopherdefine i64 @test11() { 93cee313d2SEric Christopher; CHECK-LABEL: @test11( 94*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 poison 95cee313d2SEric Christopher; 96cee313d2SEric Christopher %r = shl i64 undef, undef 97cee313d2SEric Christopher ret i64 %r 98cee313d2SEric Christopher} 99cee313d2SEric Christopher 100cee313d2SEric Christopherdefine i64 @test11b(i64 %a) { 101cee313d2SEric Christopher; CHECK-LABEL: @test11b( 102*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 poison 103cee313d2SEric Christopher; 104cee313d2SEric Christopher %r = shl i64 %a, undef 105cee313d2SEric Christopher ret i64 %r 106cee313d2SEric Christopher} 107cee313d2SEric Christopher 108cee313d2SEric Christopherdefine i64 @test12() { 109cee313d2SEric Christopher; CHECK-LABEL: @test12( 110*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 poison 111cee313d2SEric Christopher; 112cee313d2SEric Christopher %r = ashr i64 undef, undef 113cee313d2SEric Christopher ret i64 %r 114cee313d2SEric Christopher} 115cee313d2SEric Christopher 116cee313d2SEric Christopherdefine i64 @test12b(i64 %a) { 117cee313d2SEric Christopher; CHECK-LABEL: @test12b( 118*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 poison 119cee313d2SEric Christopher; 120cee313d2SEric Christopher %r = ashr i64 %a, undef 121cee313d2SEric Christopher ret i64 %r 122cee313d2SEric Christopher} 123cee313d2SEric Christopher 124cee313d2SEric Christopherdefine i64 @test13() { 125cee313d2SEric Christopher; CHECK-LABEL: @test13( 126*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 poison 127cee313d2SEric Christopher; 128cee313d2SEric Christopher %r = lshr i64 undef, undef 129cee313d2SEric Christopher ret i64 %r 130cee313d2SEric Christopher} 131cee313d2SEric Christopher 132cee313d2SEric Christopherdefine i64 @test13b(i64 %a) { 133cee313d2SEric Christopher; CHECK-LABEL: @test13b( 134*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 poison 135cee313d2SEric Christopher; 136cee313d2SEric Christopher %r = lshr i64 %a, undef 137cee313d2SEric Christopher ret i64 %r 138cee313d2SEric Christopher} 139cee313d2SEric Christopher 140cee313d2SEric Christopherdefine i1 @test14() { 141cee313d2SEric Christopher; CHECK-LABEL: @test14( 142*11b41910SDávid Bolvanský; CHECK-NEXT: ret i1 undef 143cee313d2SEric Christopher; 144cee313d2SEric Christopher %r = icmp slt i64 undef, undef 145cee313d2SEric Christopher ret i1 %r 146cee313d2SEric Christopher} 147cee313d2SEric Christopher 148cee313d2SEric Christopherdefine i1 @test15() { 149cee313d2SEric Christopher; CHECK-LABEL: @test15( 150*11b41910SDávid Bolvanský; CHECK-NEXT: ret i1 undef 151cee313d2SEric Christopher; 152cee313d2SEric Christopher %r = icmp ult i64 undef, undef 153cee313d2SEric Christopher ret i1 %r 154cee313d2SEric Christopher} 155cee313d2SEric Christopher 156cee313d2SEric Christopherdefine i64 @test16(i64 %a) { 157cee313d2SEric Christopher; CHECK-LABEL: @test16( 158*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 159cee313d2SEric Christopher; 160cee313d2SEric Christopher %r = select i1 undef, i64 %a, i64 undef 161cee313d2SEric Christopher ret i64 %r 162cee313d2SEric Christopher} 163cee313d2SEric Christopher 164cee313d2SEric Christopherdefine i64 @test17(i64 %a) { 165cee313d2SEric Christopher; CHECK-LABEL: @test17( 166*11b41910SDávid Bolvanský; CHECK-NEXT: ret i64 undef 167cee313d2SEric Christopher; 168cee313d2SEric Christopher %r = select i1 undef, i64 undef, i64 %a 169cee313d2SEric Christopher ret i64 %r 170cee313d2SEric Christopher} 171cee313d2SEric Christopher 172cee313d2SEric Christopherdefine i64 @test18(i64 %a) { 173cee313d2SEric Christopher; CHECK-LABEL: @test18( 174*11b41910SDávid Bolvanský; CHECK-NEXT: [[R:%.*]] = call i64 undef(i64 [[A:%.*]]) 175d042f2dbSNikita Popov; CHECK-NEXT: ret i64 poison 176cee313d2SEric Christopher; 177cee313d2SEric Christopher %r = call i64 (i64) undef(i64 %a) 178cee313d2SEric Christopher ret i64 %r 179cee313d2SEric Christopher} 180cee313d2SEric Christopher 181cee313d2SEric Christopherdefine <4 x i8> @test19(<4 x i8> %a) { 182cee313d2SEric Christopher; CHECK-LABEL: @test19( 183*11b41910SDávid Bolvanský; CHECK-NEXT: ret <4 x i8> poison 184cee313d2SEric Christopher; 185cee313d2SEric Christopher %b = shl <4 x i8> %a, <i8 8, i8 9, i8 undef, i8 -1> 186cee313d2SEric Christopher ret <4 x i8> %b 187cee313d2SEric Christopher} 188cee313d2SEric Christopher 189cee313d2SEric Christopherdefine i32 @test20(i32 %a) { 190cee313d2SEric Christopher; CHECK-LABEL: @test20( 191*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 192cee313d2SEric Christopher; 193cee313d2SEric Christopher %b = udiv i32 %a, 0 194cee313d2SEric Christopher ret i32 %b 195cee313d2SEric Christopher} 196cee313d2SEric Christopher 197cee313d2SEric Christopherdefine <2 x i32> @test20vec(<2 x i32> %a) { 198cee313d2SEric Christopher; CHECK-LABEL: @test20vec( 199766cf7f3SNikita Popov; CHECK-NEXT: ret <2 x i32> poison 200cee313d2SEric Christopher; 201cee313d2SEric Christopher %b = udiv <2 x i32> %a, zeroinitializer 202cee313d2SEric Christopher ret <2 x i32> %b 203cee313d2SEric Christopher} 204cee313d2SEric Christopher 205cee313d2SEric Christopherdefine i32 @test21(i32 %a) { 206cee313d2SEric Christopher; CHECK-LABEL: @test21( 207*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 208cee313d2SEric Christopher; 209cee313d2SEric Christopher %b = sdiv i32 %a, 0 210cee313d2SEric Christopher ret i32 %b 211cee313d2SEric Christopher} 212cee313d2SEric Christopher 213cee313d2SEric Christopherdefine <2 x i32> @test21vec(<2 x i32> %a) { 214cee313d2SEric Christopher; CHECK-LABEL: @test21vec( 215766cf7f3SNikita Popov; CHECK-NEXT: ret <2 x i32> poison 216cee313d2SEric Christopher; 217cee313d2SEric Christopher %b = sdiv <2 x i32> %a, zeroinitializer 218cee313d2SEric Christopher ret <2 x i32> %b 219cee313d2SEric Christopher} 220cee313d2SEric Christopher 221cee313d2SEric Christopherdefine i32 @test22(i32 %a) { 222cee313d2SEric Christopher; CHECK-LABEL: @test22( 223*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 224cee313d2SEric Christopher; 225cee313d2SEric Christopher %b = ashr exact i32 undef, %a 226cee313d2SEric Christopher ret i32 %b 227cee313d2SEric Christopher} 228cee313d2SEric Christopher 229cee313d2SEric Christopherdefine i32 @test23(i32 %a) { 230cee313d2SEric Christopher; CHECK-LABEL: @test23( 231*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 232cee313d2SEric Christopher; 233cee313d2SEric Christopher %b = lshr exact i32 undef, %a 234cee313d2SEric Christopher ret i32 %b 235cee313d2SEric Christopher} 236cee313d2SEric Christopher 237cee313d2SEric Christopherdefine i32 @test24() { 238cee313d2SEric Christopher; CHECK-LABEL: @test24( 239*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 240cee313d2SEric Christopher; 241cee313d2SEric Christopher %b = udiv i32 undef, 0 242cee313d2SEric Christopher ret i32 %b 243cee313d2SEric Christopher} 244cee313d2SEric Christopher 245cee313d2SEric Christopherdefine i32 @test25() { 246cee313d2SEric Christopher; CHECK-LABEL: @test25( 247*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 248cee313d2SEric Christopher; 249cee313d2SEric Christopher %b = lshr i32 0, undef 250cee313d2SEric Christopher ret i32 %b 251cee313d2SEric Christopher} 252cee313d2SEric Christopher 253cee313d2SEric Christopherdefine i32 @test26() { 254cee313d2SEric Christopher; CHECK-LABEL: @test26( 255*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 256cee313d2SEric Christopher; 257cee313d2SEric Christopher %b = ashr i32 0, undef 258cee313d2SEric Christopher ret i32 %b 259cee313d2SEric Christopher} 260cee313d2SEric Christopher 261cee313d2SEric Christopherdefine i32 @test27() { 262cee313d2SEric Christopher; CHECK-LABEL: @test27( 263*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 264cee313d2SEric Christopher; 265cee313d2SEric Christopher %b = shl i32 0, undef 266cee313d2SEric Christopher ret i32 %b 267cee313d2SEric Christopher} 268cee313d2SEric Christopher 269cee313d2SEric Christopherdefine i32 @test28(i32 %a) { 270cee313d2SEric Christopher; CHECK-LABEL: @test28( 271*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 272cee313d2SEric Christopher; 273cee313d2SEric Christopher %b = shl nsw i32 undef, %a 274cee313d2SEric Christopher ret i32 %b 275cee313d2SEric Christopher} 276cee313d2SEric Christopher 277cee313d2SEric Christopherdefine i32 @test29(i32 %a) { 278cee313d2SEric Christopher; CHECK-LABEL: @test29( 279*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 280cee313d2SEric Christopher; 281cee313d2SEric Christopher %b = shl nuw i32 undef, %a 282cee313d2SEric Christopher ret i32 %b 283cee313d2SEric Christopher} 284cee313d2SEric Christopher 285cee313d2SEric Christopherdefine i32 @test30(i32 %a) { 286cee313d2SEric Christopher; CHECK-LABEL: @test30( 287*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 288cee313d2SEric Christopher; 289cee313d2SEric Christopher %b = shl nsw nuw i32 undef, %a 290cee313d2SEric Christopher ret i32 %b 291cee313d2SEric Christopher} 292cee313d2SEric Christopher 293cee313d2SEric Christopherdefine i32 @test31(i32 %a) { 294cee313d2SEric Christopher; CHECK-LABEL: @test31( 295*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 0 296cee313d2SEric Christopher; 297cee313d2SEric Christopher %b = shl i32 undef, %a 298cee313d2SEric Christopher ret i32 %b 299cee313d2SEric Christopher} 300cee313d2SEric Christopher 301cee313d2SEric Christopherdefine i32 @test32(i32 %a) { 302cee313d2SEric Christopher; CHECK-LABEL: @test32( 303*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 304cee313d2SEric Christopher; 305cee313d2SEric Christopher %b = shl i32 undef, 0 306cee313d2SEric Christopher ret i32 %b 307cee313d2SEric Christopher} 308cee313d2SEric Christopher 309cee313d2SEric Christopherdefine i32 @test33(i32 %a) { 310cee313d2SEric Christopher; CHECK-LABEL: @test33( 311*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 312cee313d2SEric Christopher; 313cee313d2SEric Christopher %b = ashr i32 undef, 0 314cee313d2SEric Christopher ret i32 %b 315cee313d2SEric Christopher} 316cee313d2SEric Christopher 317cee313d2SEric Christopherdefine i32 @test34(i32 %a) { 318cee313d2SEric Christopher; CHECK-LABEL: @test34( 319*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 320cee313d2SEric Christopher; 321cee313d2SEric Christopher %b = lshr i32 undef, 0 322cee313d2SEric Christopher ret i32 %b 323cee313d2SEric Christopher} 324cee313d2SEric Christopher 325cee313d2SEric Christopherdefine i32 @test35(<4 x i32> %V) { 326cee313d2SEric Christopher; CHECK-LABEL: @test35( 327*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 328cee313d2SEric Christopher; 329cee313d2SEric Christopher %b = extractelement <4 x i32> %V, i32 4 330cee313d2SEric Christopher ret i32 %b 331cee313d2SEric Christopher} 332cee313d2SEric Christopher 333cee313d2SEric Christopherdefine i32 @test36(i32 %V) { 334cee313d2SEric Christopher; CHECK-LABEL: @test36( 335*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 undef 336cee313d2SEric Christopher; 337cee313d2SEric Christopher %b = extractelement <4 x i32> undef, i32 %V 338cee313d2SEric Christopher ret i32 %b 339cee313d2SEric Christopher} 340cee313d2SEric Christopher 341cee313d2SEric Christopherdefine i32 @test37() { 342cee313d2SEric Christopher; CHECK-LABEL: @test37( 343*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 344cee313d2SEric Christopher; 345cee313d2SEric Christopher %b = udiv i32 undef, undef 346cee313d2SEric Christopher ret i32 %b 347cee313d2SEric Christopher} 348cee313d2SEric Christopher 349cee313d2SEric Christopherdefine i32 @test38(i32 %a) { 350cee313d2SEric Christopher; CHECK-LABEL: @test38( 351*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 352cee313d2SEric Christopher; 353cee313d2SEric Christopher %b = udiv i32 %a, undef 354cee313d2SEric Christopher ret i32 %b 355cee313d2SEric Christopher} 356cee313d2SEric Christopher 357cee313d2SEric Christopherdefine i32 @test39() { 358cee313d2SEric Christopher; CHECK-LABEL: @test39( 359*11b41910SDávid Bolvanský; CHECK-NEXT: ret i32 poison 360cee313d2SEric Christopher; 361cee313d2SEric Christopher %b = udiv i32 0, undef 362cee313d2SEric Christopher ret i32 %b 363cee313d2SEric Christopher} 364