1; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 2; 3; FIXME: two consecutive immediate adds not fused in i16/i8 functions. 4 5declare i64 @llvm.ctlz.i64(i64, i1) 6declare i32 @llvm.ctlz.i32(i32, i1) 7declare i16 @llvm.ctlz.i16(i16, i1) 8declare i8 @llvm.ctlz.i8(i8, i1) 9 10define i64 @f0(i64 %arg) { 11; CHECK-LABEL: f0: 12; CHECK-LABEL: %bb.0: 13; CHECK-NOT: %bb.1: 14; CHECK: flogr 15 %1 = tail call i64 @llvm.ctlz.i64(i64 %arg, i1 false) 16 ret i64 %1 17} 18 19define i64 @f1(i64 %arg) { 20; CHECK-LABEL: f1: 21; CHECK-LABEL: %bb.0: 22; CHECK-NEXT: flogr 23; CHECK-NEXT: # kill 24; CHECK-NEXT: br %r14 25 %1 = tail call i64 @llvm.ctlz.i64(i64 %arg, i1 true) 26 ret i64 %1 27} 28 29define i32 @f2(i32 %arg) { 30; CHECK-LABEL: f2: 31; CHECK-LABEL: %bb.0: 32; CHECK-NEXT: llgfr %r0, %r2 33; CHECK-NEXT: flogr %r2, %r0 34; CHECK-NEXT: aghi %r2, -32 35; CHECK-NEXT: # kill 36; CHECK-NEXT: br %r14 37 %1 = tail call i32 @llvm.ctlz.i32(i32 %arg, i1 false) 38 ret i32 %1 39} 40 41define i32 @f3(i32 %arg) { 42; CHECK-LABEL: f3: 43; CHECK-LABEL: %bb.0: 44; CHECK-NEXT: llgfr %r0, %r2 45; CHECK-NEXT: flogr %r2, %r0 46; CHECK-NEXT: aghi %r2, -32 47; CHECK-NEXT: # kill 48; CHECK-NEXT: br %r14 49 %1 = tail call i32 @llvm.ctlz.i32(i32 %arg, i1 true) 50 ret i32 %1 51} 52 53define i16 @f4(i16 %arg) { 54; CHECK-LABEL: f4: 55; CHECK-LABEL: %bb.0: 56; CHECK-NEXT: # kill 57; CHECK-NEXT: llghr %r0, %r2 58; CHECK-NEXT: flogr %r0, %r0 59; CHECK-NEXT: aghi %r0, -32 60; CHECK-NEXT: ahik %r2, %r0, -16 61; CHECK-NEXT: br %r14 62 %1 = tail call i16 @llvm.ctlz.i16(i16 %arg, i1 false) 63 ret i16 %1 64} 65 66define i16 @f5(i16 %arg) { 67; CHECK-LABEL: f5: 68; CHECK-LABEL: %bb.0: 69; CHECK-NEXT: # kill 70; CHECK-NEXT: llghr %r0, %r2 71; CHECK-NEXT: flogr %r0, %r0 72; CHECK-NEXT: aghi %r0, -32 73; CHECK-NEXT: ahik %r2, %r0, -16 74; CHECK-NEXT: br %r14 75 %1 = tail call i16 @llvm.ctlz.i16(i16 %arg, i1 true) 76 ret i16 %1 77} 78 79define i8 @f6(i8 %arg) { 80; CHECK-LABEL: f6: 81; CHECK-LABEL: %bb.0: 82; CHECK-NEXT: # kill 83; CHECK-NEXT: llgcr %r0, %r2 84; CHECK-NEXT: flogr %r0, %r0 85; CHECK-NEXT: aghi %r0, -32 86; CHECK-NEXT: ahik %r2, %r0, -24 87; CHECK-NEXT: br %r14 88 %1 = tail call i8 @llvm.ctlz.i8(i8 %arg, i1 false) 89 ret i8 %1 90} 91 92define i8 @f7(i8 %arg) { 93; CHECK-LABEL: f7: 94; CHECK-LABEL: %bb.0: 95; CHECK-NEXT: # kill 96; CHECK-NEXT: llgcr %r0, %r2 97; CHECK-NEXT: flogr %r0, %r0 98; CHECK-NEXT: aghi %r0, -32 99; CHECK-NEXT: ahik %r2, %r0, -24 100; CHECK-NEXT: br %r14 101 %1 = tail call i8 @llvm.ctlz.i8(i8 %arg, i1 true) 102 ret i8 %1 103} 104