1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s 3 4declare i128 @llvm.ctlz.i128(i128, i1) 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 i128 @func128(i128 %p){ 11; CHECK-LABEL: func128: 12; CHECK: # %bb.0: 13; CHECK-NEXT: ldz %s2, %s1 14; CHECK-NEXT: ldz %s0, %s0 15; CHECK-NEXT: lea %s0, 64(, %s0) 16; CHECK-NEXT: cmov.l.ne %s0, %s2, %s1 17; CHECK-NEXT: or %s1, 0, (0)1 18; CHECK-NEXT: b.l.t (, %s10) 19 %r = tail call i128 @llvm.ctlz.i128(i128 %p, i1 true) 20 ret i128 %r 21} 22 23define i64 @func64(i64 %p) { 24; CHECK-LABEL: func64: 25; CHECK: # %bb.0: 26; CHECK-NEXT: ldz %s0, %s0 27; CHECK-NEXT: b.l.t (, %s10) 28 %r = tail call i64 @llvm.ctlz.i64(i64 %p, i1 true) 29 ret i64 %r 30} 31 32define signext i32 @func32s(i32 signext %p) { 33; CHECK-LABEL: func32s: 34; CHECK: # %bb.0: 35; CHECK-NEXT: sll %s0, %s0, 32 36; CHECK-NEXT: ldz %s0, %s0 37; CHECK-NEXT: b.l.t (, %s10) 38 %r = tail call i32 @llvm.ctlz.i32(i32 %p, i1 true) 39 ret i32 %r 40} 41 42define zeroext i32 @func32z(i32 zeroext %p) { 43; CHECK-LABEL: func32z: 44; CHECK: # %bb.0: 45; CHECK-NEXT: sll %s0, %s0, 32 46; CHECK-NEXT: ldz %s0, %s0 47; CHECK-NEXT: b.l.t (, %s10) 48 %r = tail call i32 @llvm.ctlz.i32(i32 %p, i1 true) 49 ret i32 %r 50} 51 52define signext i16 @func16s(i16 signext %p) { 53; CHECK-LABEL: func16s: 54; CHECK: # %bb.0: 55; CHECK-NEXT: sll %s0, %s0, 48 56; CHECK-NEXT: ldz %s0, %s0 57; CHECK-NEXT: b.l.t (, %s10) 58 %r = tail call i16 @llvm.ctlz.i16(i16 %p, i1 true) 59 ret i16 %r 60} 61 62define zeroext i16 @func16z(i16 zeroext %p) { 63; CHECK-LABEL: func16z: 64; CHECK: # %bb.0: 65; CHECK-NEXT: sll %s0, %s0, 48 66; CHECK-NEXT: ldz %s0, %s0 67; CHECK-NEXT: b.l.t (, %s10) 68 %r = tail call i16 @llvm.ctlz.i16(i16 %p, i1 true) 69 ret i16 %r 70} 71 72define signext i8 @func8s(i8 signext %p) { 73; CHECK-LABEL: func8s: 74; CHECK: # %bb.0: 75; CHECK-NEXT: sll %s0, %s0, 56 76; CHECK-NEXT: ldz %s0, %s0 77; CHECK-NEXT: b.l.t (, %s10) 78 %r = tail call i8 @llvm.ctlz.i8(i8 %p, i1 true) 79 ret i8 %r 80} 81 82define zeroext i8 @func8z(i8 zeroext %p) { 83; CHECK-LABEL: func8z: 84; CHECK: # %bb.0: 85; CHECK-NEXT: sll %s0, %s0, 56 86; CHECK-NEXT: ldz %s0, %s0 87; CHECK-NEXT: b.l.t (, %s10) 88 %r = tail call i8 @llvm.ctlz.i8(i8 %p, i1 true) 89 ret i8 %r 90} 91 92define i128 @func128i(){ 93; CHECK-LABEL: func128i: 94; CHECK: # %bb.0: 95; CHECK-NEXT: lea %s0, 112 96; CHECK-NEXT: or %s1, 0, (0)1 97; CHECK-NEXT: b.l.t (, %s10) 98 %r = tail call i128 @llvm.ctlz.i128(i128 65535, i1 true) 99 ret i128 %r 100} 101 102define i64 @func64i() { 103; CHECK-LABEL: func64i: 104; CHECK: # %bb.0: 105; CHECK-NEXT: or %s0, 48, (0)1 106; CHECK-NEXT: b.l.t (, %s10) 107 %r = tail call i64 @llvm.ctlz.i64(i64 65535, i1 true) 108 ret i64 %r 109} 110 111define signext i32 @func32is() { 112; CHECK-LABEL: func32is: 113; CHECK: # %bb.0: 114; CHECK-NEXT: or %s0, 16, (0)1 115; CHECK-NEXT: b.l.t (, %s10) 116 %r = tail call i32 @llvm.ctlz.i32(i32 65535, i1 true) 117 ret i32 %r 118} 119 120define zeroext i32 @func32iz() { 121; CHECK-LABEL: func32iz: 122; CHECK: # %bb.0: 123; CHECK-NEXT: or %s0, 16, (0)1 124; CHECK-NEXT: b.l.t (, %s10) 125 %r = tail call i32 @llvm.ctlz.i32(i32 65535, i1 true) 126 ret i32 %r 127} 128 129define signext i16 @func16is() { 130; CHECK-LABEL: func16is: 131; CHECK: # %bb.0: 132; CHECK-NEXT: or %s0, 8, (0)1 133; CHECK-NEXT: b.l.t (, %s10) 134 %r = tail call i16 @llvm.ctlz.i16(i16 255, i1 true) 135 ret i16 %r 136} 137 138define zeroext i16 @func16iz() { 139; CHECK-LABEL: func16iz: 140; CHECK: # %bb.0: 141; CHECK-NEXT: or %s0, 8, (0)1 142; CHECK-NEXT: b.l.t (, %s10) 143 %r = tail call i16 @llvm.ctlz.i16(i16 255, i1 true) 144 ret i16 %r 145} 146 147define signext i8 @func8is() { 148; CHECK-LABEL: func8is: 149; CHECK: # %bb.0: 150; CHECK-NEXT: or %s0, 0, (0)1 151; CHECK-NEXT: b.l.t (, %s10) 152 %r = tail call i8 @llvm.ctlz.i8(i8 255, i1 true) 153 ret i8 %r 154} 155 156define zeroext i8 @func8iz() { 157; CHECK-LABEL: func8iz: 158; CHECK: # %bb.0: 159; CHECK-NEXT: or %s0, 0, (0)1 160; CHECK-NEXT: b.l.t (, %s10) 161 %r = tail call i8 @llvm.ctlz.i8(i8 255, i1 true) 162 ret i8 %r 163} 164 165define i128 @func128x(i128 %p){ 166; CHECK-LABEL: func128x: 167; CHECK: # %bb.0: 168; CHECK-NEXT: ldz %s2, %s1 169; CHECK-NEXT: ldz %s0, %s0 170; CHECK-NEXT: lea %s0, 64(, %s0) 171; CHECK-NEXT: cmov.l.ne %s0, %s2, %s1 172; CHECK-NEXT: or %s1, 0, (0)1 173; CHECK-NEXT: b.l.t (, %s10) 174 %r = tail call i128 @llvm.ctlz.i128(i128 %p, i1 false) 175 ret i128 %r 176} 177 178define i64 @func64x(i64 %p) { 179; CHECK-LABEL: func64x: 180; CHECK: # %bb.0: 181; CHECK-NEXT: ldz %s0, %s0 182; CHECK-NEXT: b.l.t (, %s10) 183 %r = tail call i64 @llvm.ctlz.i64(i64 %p, i1 false) 184 ret i64 %r 185} 186 187define signext i32 @func32sx(i32 signext %p) { 188; CHECK-LABEL: func32sx: 189; CHECK: # %bb.0: 190; CHECK-NEXT: and %s0, %s0, (32)0 191; CHECK-NEXT: ldz %s0, %s0 192; CHECK-NEXT: lea %s0, -32(, %s0) 193; CHECK-NEXT: b.l.t (, %s10) 194 %r = tail call i32 @llvm.ctlz.i32(i32 %p, i1 false) 195 ret i32 %r 196} 197 198define zeroext i32 @func32zx(i32 zeroext %p) { 199; CHECK-LABEL: func32zx: 200; CHECK: # %bb.0: 201; CHECK-NEXT: ldz %s0, %s0 202; CHECK-NEXT: lea %s0, -32(, %s0) 203; CHECK-NEXT: and %s0, %s0, (32)0 204; CHECK-NEXT: b.l.t (, %s10) 205 %r = tail call i32 @llvm.ctlz.i32(i32 %p, i1 false) 206 ret i32 %r 207} 208 209define signext i16 @func16sx(i16 signext %p) { 210; CHECK-LABEL: func16sx: 211; CHECK: # %bb.0: 212; CHECK-NEXT: and %s0, %s0, (48)0 213; CHECK-NEXT: ldz %s0, %s0 214; CHECK-NEXT: lea %s0, -32(, %s0) 215; CHECK-NEXT: adds.w.sx %s0, -16, %s0 216; CHECK-NEXT: and %s0, %s0, (48)0 217; CHECK-NEXT: b.l.t (, %s10) 218 %r = tail call i16 @llvm.ctlz.i16(i16 %p, i1 false) 219 ret i16 %r 220} 221 222define zeroext i16 @func16zx(i16 zeroext %p) { 223; CHECK-LABEL: func16zx: 224; CHECK: # %bb.0: 225; CHECK-NEXT: ldz %s0, %s0 226; CHECK-NEXT: lea %s0, -32(, %s0) 227; CHECK-NEXT: adds.w.sx %s0, -16, %s0 228; CHECK-NEXT: and %s0, %s0, (48)0 229; CHECK-NEXT: b.l.t (, %s10) 230 %r = tail call i16 @llvm.ctlz.i16(i16 %p, i1 false) 231 ret i16 %r 232} 233 234define signext i8 @func8sx(i8 signext %p) { 235; CHECK-LABEL: func8sx: 236; CHECK: # %bb.0: 237; CHECK-NEXT: and %s0, %s0, (56)0 238; CHECK-NEXT: ldz %s0, %s0 239; CHECK-NEXT: lea %s0, -32(, %s0) 240; CHECK-NEXT: adds.w.sx %s0, -24, %s0 241; CHECK-NEXT: and %s0, %s0, (56)0 242; CHECK-NEXT: b.l.t (, %s10) 243 %r = tail call i8 @llvm.ctlz.i8(i8 %p, i1 false) 244 ret i8 %r 245} 246 247define zeroext i8 @func8zx(i8 zeroext %p) { 248; CHECK-LABEL: func8zx: 249; CHECK: # %bb.0: 250; CHECK-NEXT: ldz %s0, %s0 251; CHECK-NEXT: lea %s0, -32(, %s0) 252; CHECK-NEXT: adds.w.sx %s0, -24, %s0 253; CHECK-NEXT: and %s0, %s0, (56)0 254; CHECK-NEXT: b.l.t (, %s10) 255 %r = tail call i8 @llvm.ctlz.i8(i8 %p, i1 false) 256 ret i8 %r 257} 258