1486ed885SArthur Eubanks; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s 3486ed885SArthur Eubanks 4486ed885SArthur Eubanksdeclare {i8, i1} @llvm.uadd.with.overflow.i8(i8, i8) 5486ed885SArthur Eubanksdeclare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8) 6486ed885SArthur Eubanksdeclare {i8, i1} @llvm.umul.with.overflow.i8(i8, i8) 7486ed885SArthur Eubanks 8486ed885SArthur Eubanksdeclare {i8, i1} @llvm.sadd.with.overflow.i8(i8, i8) 9486ed885SArthur Eubanksdeclare {i8, i1} @llvm.ssub.with.overflow.i8(i8, i8) 10486ed885SArthur Eubanksdeclare {i8, i1} @llvm.smul.with.overflow.i8(i8, i8) 11486ed885SArthur Eubanks 12486ed885SArthur Eubanks;;----------------------------- 13486ed885SArthur Eubanks;; uadd 14486ed885SArthur Eubanks;;----------------------------- 15486ed885SArthur Eubanks 16486ed885SArthur Eubanksdefine {i8, i1} @uadd_1() nounwind { 17486ed885SArthur Eubanks; CHECK-LABEL: @uadd_1( 18486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -114, i1 false } 19486ed885SArthur Eubanks; 20486ed885SArthur Eubanks %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 42, i8 100) 21486ed885SArthur Eubanks ret {i8, i1} %t 22486ed885SArthur Eubanks} 23486ed885SArthur Eubanks 24486ed885SArthur Eubanksdefine {i8, i1} @uadd_2() nounwind { 25486ed885SArthur Eubanks; CHECK-LABEL: @uadd_2( 26486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 6, i1 true } 27486ed885SArthur Eubanks; 28486ed885SArthur Eubanks %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 142, i8 120) 29486ed885SArthur Eubanks ret {i8, i1} %t 30486ed885SArthur Eubanks} 31486ed885SArthur Eubanks 32486ed885SArthur Eubanksdefine {i8, i1} @uadd_undef() nounwind { 33486ed885SArthur Eubanks; CHECK-LABEL: @uadd_undef( 34807b019cSGeorge Mitenkov; CHECK-NEXT: ret { i8, i1 } { i8 -1, i1 false } 35486ed885SArthur Eubanks; 36486ed885SArthur Eubanks %t = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 142, i8 undef) 37486ed885SArthur Eubanks ret {i8, i1} %t 38486ed885SArthur Eubanks} 39486ed885SArthur Eubanks 40486ed885SArthur Eubanks;;----------------------------- 41486ed885SArthur Eubanks;; usub 42486ed885SArthur Eubanks;;----------------------------- 43486ed885SArthur Eubanks 44486ed885SArthur Eubanksdefine {i8, i1} @usub_1() nounwind { 45486ed885SArthur Eubanks; CHECK-LABEL: @usub_1( 46486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 2, i1 false } 47486ed885SArthur Eubanks; 48486ed885SArthur Eubanks %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 2) 49486ed885SArthur Eubanks ret {i8, i1} %t 50486ed885SArthur Eubanks} 51486ed885SArthur Eubanks 52486ed885SArthur Eubanksdefine {i8, i1} @usub_2() nounwind { 53486ed885SArthur Eubanks; CHECK-LABEL: @usub_2( 54486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -2, i1 true } 55486ed885SArthur Eubanks; 56486ed885SArthur Eubanks %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 6) 57486ed885SArthur Eubanks ret {i8, i1} %t 58486ed885SArthur Eubanks} 59486ed885SArthur Eubanks 60486ed885SArthur Eubanksdefine {i8, i1} @usub_undef() nounwind { 61486ed885SArthur Eubanks; CHECK-LABEL: @usub_undef( 62807b019cSGeorge Mitenkov; CHECK-NEXT: ret { i8, i1 } zeroinitializer 63486ed885SArthur Eubanks; 64486ed885SArthur Eubanks %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 4, i8 undef) 65486ed885SArthur Eubanks ret {i8, i1} %t 66486ed885SArthur Eubanks} 67486ed885SArthur Eubanks 68486ed885SArthur Eubanks;;----------------------------- 69486ed885SArthur Eubanks;; umul 70486ed885SArthur Eubanks;;----------------------------- 71486ed885SArthur Eubanks 72486ed885SArthur Eubanksdefine {i8, i1} @umul_1() nounwind { 73486ed885SArthur Eubanks; CHECK-LABEL: @umul_1( 74486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 44, i1 true } 75486ed885SArthur Eubanks; 76486ed885SArthur Eubanks %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 100, i8 3) 77486ed885SArthur Eubanks ret {i8, i1} %t 78486ed885SArthur Eubanks} 79486ed885SArthur Eubanks 80486ed885SArthur Eubanksdefine {i8, i1} @umul_2() nounwind { 81486ed885SArthur Eubanks; CHECK-LABEL: @umul_2( 82486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -56, i1 false } 83486ed885SArthur Eubanks; 84486ed885SArthur Eubanks %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 100, i8 2) 85486ed885SArthur Eubanks ret {i8, i1} %t 86486ed885SArthur Eubanks} 87486ed885SArthur Eubanks 88486ed885SArthur Eubanksdefine {i8, i1} @umul_undef() nounwind { 89486ed885SArthur Eubanks; CHECK-LABEL: @umul_undef( 90486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } zeroinitializer 91486ed885SArthur Eubanks; 92486ed885SArthur Eubanks %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 undef, i8 2) 93486ed885SArthur Eubanks ret {i8, i1} %t 94486ed885SArthur Eubanks} 95486ed885SArthur Eubanks 96486ed885SArthur Eubanksdefine {i8, i1} @umul_both_undef() nounwind { 97486ed885SArthur Eubanks; CHECK-LABEL: @umul_both_undef( 98486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } zeroinitializer 99486ed885SArthur Eubanks; 100486ed885SArthur Eubanks %t = call {i8, i1} @llvm.umul.with.overflow.i8(i8 undef, i8 undef) 101486ed885SArthur Eubanks ret {i8, i1} %t 102486ed885SArthur Eubanks} 103486ed885SArthur Eubanks 104486ed885SArthur Eubanks;;----------------------------- 105486ed885SArthur Eubanks;; sadd 106486ed885SArthur Eubanks;;----------------------------- 107486ed885SArthur Eubanks 108486ed885SArthur Eubanksdefine {i8, i1} @sadd_1() nounwind { 109486ed885SArthur Eubanks; CHECK-LABEL: @sadd_1( 110486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 44, i1 false } 111486ed885SArthur Eubanks; 112486ed885SArthur Eubanks %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 42, i8 2) 113486ed885SArthur Eubanks ret {i8, i1} %t 114486ed885SArthur Eubanks} 115486ed885SArthur Eubanks 116486ed885SArthur Eubanksdefine {i8, i1} @sadd_2() nounwind { 117486ed885SArthur Eubanks; CHECK-LABEL: @sadd_2( 118486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -126, i1 true } 119486ed885SArthur Eubanks; 120486ed885SArthur Eubanks %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 120, i8 10) 121486ed885SArthur Eubanks ret {i8, i1} %t 122486ed885SArthur Eubanks} 123486ed885SArthur Eubanks 124486ed885SArthur Eubanksdefine {i8, i1} @sadd_3() nounwind { 125486ed885SArthur Eubanks; CHECK-LABEL: @sadd_3( 126486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -110, i1 false } 127486ed885SArthur Eubanks; 128486ed885SArthur Eubanks %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 10) 129486ed885SArthur Eubanks ret {i8, i1} %t 130486ed885SArthur Eubanks} 131486ed885SArthur Eubanks 132486ed885SArthur Eubanksdefine {i8, i1} @sadd_4() nounwind { 133486ed885SArthur Eubanks; CHECK-LABEL: @sadd_4( 134486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 126, i1 true } 135486ed885SArthur Eubanks; 136486ed885SArthur Eubanks %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 -120, i8 -10) 137486ed885SArthur Eubanks ret {i8, i1} %t 138486ed885SArthur Eubanks} 139486ed885SArthur Eubanks 140486ed885SArthur Eubanksdefine {i8, i1} @sadd_5() nounwind { 141486ed885SArthur Eubanks; CHECK-LABEL: @sadd_5( 142486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -8, i1 false } 143486ed885SArthur Eubanks; 144486ed885SArthur Eubanks %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 2, i8 -10) 145486ed885SArthur Eubanks ret {i8, i1} %t 146486ed885SArthur Eubanks} 147486ed885SArthur Eubanks 148486ed885SArthur Eubanksdefine {i8, i1} @sadd_undef() nounwind { 149486ed885SArthur Eubanks; CHECK-LABEL: @sadd_undef( 150807b019cSGeorge Mitenkov; CHECK-NEXT: ret { i8, i1 } { i8 -1, i1 false } 151486ed885SArthur Eubanks; 152486ed885SArthur Eubanks %t = call {i8, i1} @llvm.sadd.with.overflow.i8(i8 undef, i8 -10) 153486ed885SArthur Eubanks ret {i8, i1} %t 154486ed885SArthur Eubanks} 155486ed885SArthur Eubanks 156486ed885SArthur Eubanks;;----------------------------- 157486ed885SArthur Eubanks;; ssub 158486ed885SArthur Eubanks;;----------------------------- 159486ed885SArthur Eubanks 160486ed885SArthur Eubanksdefine {i8, i1} @ssub_1() nounwind { 161486ed885SArthur Eubanks; CHECK-LABEL: @ssub_1( 162486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 2, i1 false } 163486ed885SArthur Eubanks; 164486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 2) 165486ed885SArthur Eubanks ret {i8, i1} %t 166486ed885SArthur Eubanks} 167486ed885SArthur Eubanks 168486ed885SArthur Eubanksdefine {i8, i1} @ssub_2() nounwind { 169486ed885SArthur Eubanks; CHECK-LABEL: @ssub_2( 170486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -2, i1 false } 171486ed885SArthur Eubanks; 172486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 4, i8 6) 173486ed885SArthur Eubanks ret {i8, i1} %t 174486ed885SArthur Eubanks} 175486ed885SArthur Eubanks 176486ed885SArthur Eubanksdefine {i8, i1} @ssub_3() nounwind { 177486ed885SArthur Eubanks; CHECK-LABEL: @ssub_3( 178486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 126, i1 true } 179486ed885SArthur Eubanks; 180486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 120) 181486ed885SArthur Eubanks ret {i8, i1} %t 182486ed885SArthur Eubanks} 183486ed885SArthur Eubanks 184486ed885SArthur Eubanksdefine {i8, i1} @ssub_3b() nounwind { 185486ed885SArthur Eubanks; CHECK-LABEL: @ssub_3b( 186486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -20, i1 false } 187486ed885SArthur Eubanks; 188486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -10, i8 10) 189486ed885SArthur Eubanks ret {i8, i1} %t 190486ed885SArthur Eubanks} 191486ed885SArthur Eubanks 192486ed885SArthur Eubanksdefine {i8, i1} @ssub_4() nounwind { 193486ed885SArthur Eubanks; CHECK-LABEL: @ssub_4( 194486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -126, i1 true } 195486ed885SArthur Eubanks; 196486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 120, i8 -10) 197486ed885SArthur Eubanks ret {i8, i1} %t 198486ed885SArthur Eubanks} 199486ed885SArthur Eubanks 200486ed885SArthur Eubanksdefine {i8, i1} @ssub_4b() nounwind { 201486ed885SArthur Eubanks; CHECK-LABEL: @ssub_4b( 202486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 30, i1 false } 203486ed885SArthur Eubanks; 204486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 20, i8 -10) 205486ed885SArthur Eubanks ret {i8, i1} %t 206486ed885SArthur Eubanks} 207486ed885SArthur Eubanks 208486ed885SArthur Eubanksdefine {i8, i1} @ssub_5() nounwind { 209486ed885SArthur Eubanks; CHECK-LABEL: @ssub_5( 210486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -10, i1 false } 211486ed885SArthur Eubanks; 212486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 -20, i8 -10) 213486ed885SArthur Eubanks ret {i8, i1} %t 214486ed885SArthur Eubanks} 215486ed885SArthur Eubanks 216486ed885SArthur Eubanksdefine {i8, i1} @ssub_undef() nounwind { 217486ed885SArthur Eubanks; CHECK-LABEL: @ssub_undef( 218807b019cSGeorge Mitenkov; CHECK-NEXT: ret { i8, i1 } zeroinitializer 219486ed885SArthur Eubanks; 220486ed885SArthur Eubanks %t = call {i8, i1} @llvm.ssub.with.overflow.i8(i8 undef, i8 -10) 221486ed885SArthur Eubanks ret {i8, i1} %t 222486ed885SArthur Eubanks} 223486ed885SArthur Eubanks 224486ed885SArthur Eubanks;;----------------------------- 225486ed885SArthur Eubanks;; smul 226486ed885SArthur Eubanks;;----------------------------- 227486ed885SArthur Eubanks 228486ed885SArthur Eubanksdefine {i8, i1} @smul_1() nounwind { 229486ed885SArthur Eubanks; CHECK-LABEL: @smul_1( 230486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } { i8 -56, i1 true } 231486ed885SArthur Eubanks; 232486ed885SArthur Eubanks %t = call {i8, i1} @llvm.smul.with.overflow.i8(i8 -20, i8 -10) 233486ed885SArthur Eubanks ret {i8, i1} %t 234486ed885SArthur Eubanks} 235486ed885SArthur Eubanks 236486ed885SArthur Eubanksdefine {i8, i1} @smul_undef() nounwind { 237486ed885SArthur Eubanks; CHECK-LABEL: @smul_undef( 238486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } zeroinitializer 239486ed885SArthur Eubanks; 240486ed885SArthur Eubanks %t = call {i8, i1} @llvm.smul.with.overflow.i8(i8 -20, i8 undef) 241486ed885SArthur Eubanks ret {i8, i1} %t 242486ed885SArthur Eubanks} 243486ed885SArthur Eubanks 244486ed885SArthur Eubanksdefine {i8, i1} @smul_both_undef() nounwind { 245486ed885SArthur Eubanks; CHECK-LABEL: @smul_both_undef( 246486ed885SArthur Eubanks; CHECK-NEXT: ret { i8, i1 } zeroinitializer 247486ed885SArthur Eubanks; 248486ed885SArthur Eubanks %t = call {i8, i1} @llvm.smul.with.overflow.i8(i8 undef, i8 undef) 249486ed885SArthur Eubanks ret {i8, i1} %t 250486ed885SArthur Eubanks} 251