1cdcce3caSJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 -O3 | FileCheck %s 2cdcce3caSJonas Paulsson; 3cdcce3caSJonas Paulsson; Check that CodeGenPrepare transforms these functions to use 4cdcce3caSJonas Paulsson; uadd.with.overflow / usub.with.overflow intrinsics so that the compare 5cdcce3caSJonas Paulsson; instruction is eliminated. 6cdcce3caSJonas Paulsson 7cdcce3caSJonas Paulssondefine i32 @uaddo_32(i32 %arg) { 8cdcce3caSJonas Paulsson; CHECK-LABEL: uaddo_32: 9cdcce3caSJonas Paulsson; CHECK: alhsik %r0, %r2, -1 10cdcce3caSJonas Paulsson; CHECK: locrnle %r2, %r0 11cdcce3caSJonas Paulsson; CHECK: br %r14 12cdcce3caSJonas Paulsson 13cdcce3caSJonas Paulssonbb: 14cdcce3caSJonas Paulsson %tmp10 = icmp ne i32 %arg, 0 15cdcce3caSJonas Paulsson %tmp11 = add nsw i32 %arg, -1 16cdcce3caSJonas Paulsson %tmp12 = select i1 %tmp10, i32 %tmp11, i32 %arg 17cdcce3caSJonas Paulsson ret i32 %tmp12 18cdcce3caSJonas Paulsson} 19cdcce3caSJonas Paulsson 20cdcce3caSJonas Paulssondefine i64 @uaddo_64(i64 %arg) { 21cdcce3caSJonas Paulsson; CHECK-LABEL: uaddo_64: 22cdcce3caSJonas Paulsson; CHECK: alghsik %r0, %r2, -1 23cdcce3caSJonas Paulsson; CHECK: locgrnle %r2, %r0 24cdcce3caSJonas Paulsson; CHECK: br %r14 25cdcce3caSJonas Paulssonbb: 26cdcce3caSJonas Paulsson %tmp10 = icmp ne i64 %arg, 0 27cdcce3caSJonas Paulsson %tmp11 = add nsw i64 %arg, -1 28cdcce3caSJonas Paulsson %tmp12 = select i1 %tmp10, i64 %tmp11, i64 %arg 29cdcce3caSJonas Paulsson ret i64 %tmp12 30cdcce3caSJonas Paulsson} 31cdcce3caSJonas Paulsson 32cdcce3caSJonas Paulssondefine i32 @usubo_32(i32 %arg) { 33cdcce3caSJonas Paulsson; CHECK-LABEL: usubo_32: 34cdcce3caSJonas Paulsson; CHECK: alhsik %r0, %r2, -1 35cdcce3caSJonas Paulsson; CHECK: locrle %r2, %r0 36cdcce3caSJonas Paulsson; CHECK: br %r14 37cdcce3caSJonas Paulssonbb: 38cdcce3caSJonas Paulsson %tmp10 = icmp eq i32 %arg, 0 39cdcce3caSJonas Paulsson %tmp11 = sub nsw i32 %arg, 1 40cdcce3caSJonas Paulsson %tmp12 = select i1 %tmp10, i32 %tmp11, i32 %arg 41cdcce3caSJonas Paulsson ret i32 %tmp12 42cdcce3caSJonas Paulsson} 43cdcce3caSJonas Paulsson 44cdcce3caSJonas Paulssondefine i64 @usubo_64(i64 %arg) { 45cdcce3caSJonas Paulsson; CHECK-LABEL: usubo_64: 46cdcce3caSJonas Paulsson; CHECK: alghsik %r0, %r2, -1 47cdcce3caSJonas Paulsson; CHECK: locgrle %r2, %r0 48cdcce3caSJonas Paulsson; CHECK: br %r14 49cdcce3caSJonas Paulssonbb: 50cdcce3caSJonas Paulsson %tmp10 = icmp eq i64 %arg, 0 51cdcce3caSJonas Paulsson %tmp11 = sub nsw i64 %arg, 1 52cdcce3caSJonas Paulsson %tmp12 = select i1 %tmp10, i64 %tmp11, i64 %arg 53cdcce3caSJonas Paulsson ret i64 %tmp12 54cdcce3caSJonas Paulsson} 55*e77cb4aeSJonas Paulsson 56*e77cb4aeSJonas Paulssondefine i32 @optbranch_32(i32 %Arg) { 57*e77cb4aeSJonas Paulsson; CHECK-LABEL: optbranch_32: 58*e77cb4aeSJonas Paulsson; CHECK: alhsik %r2, %r2, 1 59*e77cb4aeSJonas Paulsson; CHECK-NEXT: bler %r14 60*e77cb4aeSJonas Paulsson; CHECK-NEXT: .LBB4_1: 61*e77cb4aeSJonas Paulsson; CHECK-NEXT: lhi %r2, -1 62*e77cb4aeSJonas Paulsson; CHECK-NEXT: br %r14 63*e77cb4aeSJonas Paulssonbb: 64*e77cb4aeSJonas Paulsson %i1 = icmp eq i32 %Arg, -1 65*e77cb4aeSJonas Paulsson br i1 %i1, label %bb2, label %bb3 66*e77cb4aeSJonas Paulsson 67*e77cb4aeSJonas Paulssonbb2: 68*e77cb4aeSJonas Paulsson ret i32 -1 69*e77cb4aeSJonas Paulsson 70*e77cb4aeSJonas Paulssonbb3: 71*e77cb4aeSJonas Paulsson %i4 = add nuw i32 %Arg, 1 72*e77cb4aeSJonas Paulsson ret i32 %i4 73*e77cb4aeSJonas Paulsson} 74*e77cb4aeSJonas Paulsson 75*e77cb4aeSJonas Paulssondefine i64 @optbranch_64(i64 %Arg) { 76*e77cb4aeSJonas Paulsson; CHECK-LABEL: optbranch_64: 77*e77cb4aeSJonas Paulsson; CHECK: alghsik %r2, %r2, 1 78*e77cb4aeSJonas Paulsson; CHECK-NEXT: bler %r14 79*e77cb4aeSJonas Paulsson; CHECK-NEXT: .LBB5_1: 80*e77cb4aeSJonas Paulsson; CHECK-NEXT: lghi %r2, -1 81*e77cb4aeSJonas Paulsson; CHECK-NEXT: br %r14 82*e77cb4aeSJonas Paulssonbb: 83*e77cb4aeSJonas Paulsson %i1 = icmp eq i64 %Arg, -1 84*e77cb4aeSJonas Paulsson br i1 %i1, label %bb2, label %bb3 85*e77cb4aeSJonas Paulsson 86*e77cb4aeSJonas Paulssonbb2: 87*e77cb4aeSJonas Paulsson ret i64 -1 88*e77cb4aeSJonas Paulsson 89*e77cb4aeSJonas Paulssonbb3: 90*e77cb4aeSJonas Paulsson %i4 = add nuw i64 %Arg, 1 91*e77cb4aeSJonas Paulsson ret i64 %i4 92*e77cb4aeSJonas Paulsson} 93