1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s 2 3define signext i16 @func1() { 4; CHECK-LABEL: func1: 5; CHECK: .LBB{{[0-9]+}}_2: 6; CHECK-NEXT: ld1b.sx %s0, 15(, %s11) 7; CHECK-NEXT: adds.l %s11, 16, %s11 8; CHECK-NEXT: b.l.t (, %s10) 9 %a = alloca i8, align 1 10 %a.val = load i8, ptr %a, align 1 11 %a.conv = sext i8 %a.val to i16 12 ret i16 %a.conv 13} 14 15define i32 @func2() { 16; CHECK-LABEL: func2: 17; CHECK: .LBB{{[0-9]+}}_2: 18; CHECK-NEXT: ld1b.sx %s0, 15(, %s11) 19; CHECK-NEXT: adds.l %s11, 16, %s11 20; CHECK-NEXT: b.l.t (, %s10) 21 %a = alloca i8, align 1 22 %a.val = load i8, ptr %a, align 1 23 %a.conv = sext i8 %a.val to i32 24 ret i32 %a.conv 25} 26 27define i64 @func3() { 28; CHECK-LABEL: func3: 29; CHECK: .LBB{{[0-9]+}}_2: 30; CHECK-NEXT: ld1b.sx %s0, 15(, %s11) 31; CHECK-NEXT: adds.l %s11, 16, %s11 32; CHECK-NEXT: b.l.t (, %s10) 33 %a = alloca i8, align 1 34 %a.val = load i8, ptr %a, align 1 35 %a.conv = sext i8 %a.val to i64 36 ret i64 %a.conv 37} 38 39define zeroext i16 @func5() { 40; CHECK-LABEL: func5: 41; CHECK: .LBB{{[0-9]+}}_2: 42; CHECK-NEXT: ld1b.sx %s0, 15(, %s11) 43; CHECK-NEXT: and %s0, %s0, (48)0 44; CHECK-NEXT: adds.l %s11, 16, %s11 45; CHECK-NEXT: b.l.t (, %s10) 46 %a = alloca i8, align 1 47 %a.val = load i8, ptr %a, align 1 48 %a.conv = sext i8 %a.val to i16 49 ret i16 %a.conv 50} 51 52define i32 @func6() { 53; CHECK-LABEL: func6: 54; CHECK: .LBB{{[0-9]+}}_2: 55; CHECK-NEXT: ld1b.sx %s0, 15(, %s11) 56; CHECK-NEXT: adds.l %s11, 16, %s11 57; CHECK-NEXT: b.l.t (, %s10) 58 %a = alloca i8, align 1 59 %a.val = load i8, ptr %a, align 1 60 %a.conv = sext i8 %a.val to i32 61 ret i32 %a.conv 62} 63 64define i64 @func7() { 65; CHECK-LABEL: func7: 66; CHECK: .LBB{{[0-9]+}}_2: 67; CHECK-NEXT: ld1b.sx %s0, 15(, %s11) 68; CHECK-NEXT: adds.l %s11, 16, %s11 69; CHECK-NEXT: b.l.t (, %s10) 70 %a = alloca i8, align 1 71 %a.val = load i8, ptr %a, align 1 72 %a.conv = sext i8 %a.val to i64 73 ret i64 %a.conv 74} 75 76define signext i16 @func9() { 77; CHECK-LABEL: func9: 78; CHECK: .LBB{{[0-9]+}}_2: 79; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 80; CHECK-NEXT: adds.l %s11, 16, %s11 81; CHECK-NEXT: b.l.t (, %s10) 82 %a = alloca i8, align 1 83 %a.val = load i8, ptr %a, align 1 84 %a.conv = zext i8 %a.val to i16 85 ret i16 %a.conv 86} 87 88define i32 @func10() { 89; CHECK-LABEL: func10: 90; CHECK: .LBB{{[0-9]+}}_2: 91; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 92; CHECK-NEXT: adds.l %s11, 16, %s11 93; CHECK-NEXT: b.l.t (, %s10) 94 %a = alloca i8, align 1 95 %a.val = load i8, ptr %a, align 1 96 %a.conv = zext i8 %a.val to i32 97 ret i32 %a.conv 98} 99 100define i64 @func11() { 101; CHECK-LABEL: func11: 102; CHECK: .LBB{{[0-9]+}}_2: 103; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 104; CHECK-NEXT: adds.l %s11, 16, %s11 105; CHECK-NEXT: b.l.t (, %s10) 106 %a = alloca i8, align 1 107 %a.val = load i8, ptr %a, align 1 108 %a.conv = zext i8 %a.val to i64 109 ret i64 %a.conv 110} 111 112define zeroext i16 @func13() { 113; CHECK-LABEL: func13: 114; CHECK: .LBB{{[0-9]+}}_2: 115; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 116; CHECK-NEXT: adds.l %s11, 16, %s11 117; CHECK-NEXT: b.l.t (, %s10) 118 %a = alloca i8, align 1 119 %a.val = load i8, ptr %a, align 1 120 %a.conv = zext i8 %a.val to i16 121 ret i16 %a.conv 122} 123 124define zeroext i16 @func14() { 125; CHECK-LABEL: func14: 126; CHECK: .LBB{{[0-9]+}}_2: 127; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 128; CHECK-NEXT: adds.l %s11, 16, %s11 129; CHECK-NEXT: b.l.t (, %s10) 130 %a = alloca i8, align 1 131 %a.val = load i8, ptr %a, align 1 132 %a.conv = zext i8 %a.val to i16 133 ret i16 %a.conv 134} 135 136define i64 @func15() { 137; CHECK-LABEL: func15: 138; CHECK: .LBB{{[0-9]+}}_2: 139; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 140; CHECK-NEXT: adds.l %s11, 16, %s11 141; CHECK-NEXT: b.l.t (, %s10) 142 %a = alloca i8, align 1 143 %a.val = load i8, ptr %a, align 1 144 %a.conv = zext i8 %a.val to i64 145 ret i64 %a.conv 146} 147 148define i32 @func17() { 149; CHECK-LABEL: func17: 150; CHECK: .LBB{{[0-9]+}}_2: 151; CHECK-NEXT: ld2b.sx %s0, 14(, %s11) 152; CHECK-NEXT: adds.l %s11, 16, %s11 153; CHECK-NEXT: b.l.t (, %s10) 154 %a = alloca i16, align 2 155 %a.val = load i16, ptr %a, align 2 156 %a.conv = sext i16 %a.val to i32 157 ret i32 %a.conv 158} 159 160define i64 @func18() { 161; CHECK-LABEL: func18: 162; CHECK: .LBB{{[0-9]+}}_2: 163; CHECK-NEXT: ld2b.sx %s0, 14(, %s11) 164; CHECK-NEXT: adds.l %s11, 16, %s11 165; CHECK-NEXT: b.l.t (, %s10) 166 %a = alloca i16, align 2 167 %a.val = load i16, ptr %a, align 2 168 %a.conv = sext i16 %a.val to i64 169 ret i64 %a.conv 170} 171 172define zeroext i16 @func20() { 173; CHECK-LABEL: func20: 174; CHECK: .LBB{{[0-9]+}}_2: 175; CHECK-NEXT: ld2b.zx %s0, 14(, %s11) 176; CHECK-NEXT: adds.l %s11, 16, %s11 177; CHECK-NEXT: b.l.t (, %s10) 178 %a = alloca i16, align 2 179 %a.conv = load i16, ptr %a, align 2 180 ret i16 %a.conv 181} 182 183define i64 @func21() { 184; CHECK-LABEL: func21: 185; CHECK: .LBB{{[0-9]+}}_2: 186; CHECK-NEXT: ld2b.sx %s0, 14(, %s11) 187; CHECK-NEXT: adds.l %s11, 16, %s11 188; CHECK-NEXT: b.l.t (, %s10) 189 %a = alloca i16, align 2 190 %a.val = load i16, ptr %a, align 2 191 %a.conv = sext i16 %a.val to i64 192 ret i64 %a.conv 193} 194 195define i32 @func23() { 196; CHECK-LABEL: func23: 197; CHECK: .LBB{{[0-9]+}}_2: 198; CHECK-NEXT: ld2b.zx %s0, 14(, %s11) 199; CHECK-NEXT: adds.l %s11, 16, %s11 200; CHECK-NEXT: b.l.t (, %s10) 201 %a = alloca i16, align 2 202 %a.val = load i16, ptr %a, align 2 203 %a.conv = zext i16 %a.val to i32 204 ret i32 %a.conv 205} 206 207define i64 @func24() { 208; CHECK-LABEL: func24: 209; CHECK: .LBB{{[0-9]+}}_2: 210; CHECK-NEXT: ld2b.zx %s0, 14(, %s11) 211; CHECK-NEXT: adds.l %s11, 16, %s11 212; CHECK-NEXT: b.l.t (, %s10) 213 %a = alloca i16, align 2 214 %a.val = load i16, ptr %a, align 2 215 %a.conv = zext i16 %a.val to i64 216 ret i64 %a.conv 217} 218 219define zeroext i16 @func26() { 220; CHECK-LABEL: func26: 221; CHECK: .LBB{{[0-9]+}}_2: 222; CHECK-NEXT: ld2b.zx %s0, 14(, %s11) 223; CHECK-NEXT: adds.l %s11, 16, %s11 224; CHECK-NEXT: b.l.t (, %s10) 225 %a = alloca i16, align 2 226 %a.conv = load i16, ptr %a, align 2 227 ret i16 %a.conv 228} 229 230define i64 @func27() { 231; CHECK-LABEL: func27: 232; CHECK: .LBB{{[0-9]+}}_2: 233; CHECK-NEXT: ld2b.zx %s0, 14(, %s11) 234; CHECK-NEXT: adds.l %s11, 16, %s11 235; CHECK-NEXT: b.l.t (, %s10) 236 %a = alloca i16, align 2 237 %a.val = load i16, ptr %a, align 2 238 %a.conv = zext i16 %a.val to i64 239 ret i64 %a.conv 240} 241 242define i64 @func29() { 243; CHECK-LABEL: func29: 244; CHECK: .LBB{{[0-9]+}}_2: 245; CHECK-NEXT: ldl.sx %s0, 12(, %s11) 246; CHECK-NEXT: adds.l %s11, 16, %s11 247; CHECK-NEXT: b.l.t (, %s10) 248 %a = alloca i32, align 4 249 %a.val = load i32, ptr %a, align 4 250 %a.conv = sext i32 %a.val to i64 251 ret i64 %a.conv 252} 253 254define i64 @func31() { 255; CHECK-LABEL: func31: 256; CHECK: .LBB{{[0-9]+}}_2: 257; CHECK-NEXT: ldl.sx %s0, 12(, %s11) 258; CHECK-NEXT: adds.l %s11, 16, %s11 259; CHECK-NEXT: b.l.t (, %s10) 260 %a = alloca i32, align 4 261 %a.val = load i32, ptr %a, align 4 262 %a.conv = sext i32 %a.val to i64 263 ret i64 %a.conv 264} 265 266define i64 @func33() { 267; CHECK-LABEL: func33: 268; CHECK: .LBB{{[0-9]+}}_2: 269; CHECK-NEXT: ldl.zx %s0, 12(, %s11) 270; CHECK-NEXT: adds.l %s11, 16, %s11 271; CHECK-NEXT: b.l.t (, %s10) 272 %a = alloca i32, align 4 273 %a.val = load i32, ptr %a, align 4 274 %a.conv = zext i32 %a.val to i64 275 ret i64 %a.conv 276} 277 278define i64 @func35() { 279; CHECK-LABEL: func35: 280; CHECK: .LBB{{[0-9]+}}_2: 281; CHECK-NEXT: ldl.zx %s0, 12(, %s11) 282; CHECK-NEXT: adds.l %s11, 16, %s11 283; CHECK-NEXT: b.l.t (, %s10) 284 %a = alloca i32, align 4 285 %a.val = load i32, ptr %a, align 4 286 %a.conv = zext i32 %a.val to i64 287 ret i64 %a.conv 288} 289 290define signext i8 @func37() { 291; CHECK-LABEL: func37: 292; CHECK: .LBB{{[0-9]+}}_2: 293; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 294; CHECK-NEXT: sll %s0, %s0, 63 295; CHECK-NEXT: sra.l %s0, %s0, 63 296; CHECK-NEXT: adds.l %s11, 16, %s11 297; CHECK-NEXT: b.l.t (, %s10) 298 %a = alloca i1, align 1 299 %a.val = load i1, ptr %a, align 1 300 %a.conv = sext i1 %a.val to i8 301 ret i8 %a.conv 302} 303 304define signext i16 @func38() { 305; CHECK-LABEL: func38: 306; CHECK: .LBB{{[0-9]+}}_2: 307; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 308; CHECK-NEXT: sll %s0, %s0, 63 309; CHECK-NEXT: sra.l %s0, %s0, 63 310; CHECK-NEXT: adds.l %s11, 16, %s11 311; CHECK-NEXT: b.l.t (, %s10) 312 %a = alloca i1, align 1 313 %a.val = load i1, ptr %a, align 1 314 %a.conv = sext i1 %a.val to i16 315 ret i16 %a.conv 316} 317 318define signext i32 @func39() { 319; CHECK-LABEL: func39: 320; CHECK: .LBB{{[0-9]+}}_2: 321; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 322; CHECK-NEXT: sll %s0, %s0, 63 323; CHECK-NEXT: sra.l %s0, %s0, 63 324; CHECK-NEXT: adds.l %s11, 16, %s11 325; CHECK-NEXT: b.l.t (, %s10) 326 %a = alloca i1, align 1 327 %a.val = load i1, ptr %a, align 1 328 %a.conv = sext i1 %a.val to i32 329 ret i32 %a.conv 330} 331 332define signext i64 @func40() { 333; CHECK-LABEL: func40: 334; CHECK: .LBB{{[0-9]+}}_2: 335; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 336; CHECK-NEXT: sll %s0, %s0, 63 337; CHECK-NEXT: sra.l %s0, %s0, 63 338; CHECK-NEXT: adds.l %s11, 16, %s11 339; CHECK-NEXT: b.l.t (, %s10) 340 %a = alloca i1, align 1 341 %a.val = load i1, ptr %a, align 1 342 %a.conv = sext i1 %a.val to i64 343 ret i64 %a.conv 344} 345 346define signext i8 @func42() { 347; CHECK-LABEL: func42: 348; CHECK: .LBB{{[0-9]+}}_2: 349; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 350; CHECK-NEXT: adds.l %s11, 16, %s11 351; CHECK-NEXT: b.l.t (, %s10) 352 %a = alloca i1, align 1 353 %a.val = load i1, ptr %a, align 1 354 %a.conv = zext i1 %a.val to i8 355 ret i8 %a.conv 356} 357 358define signext i16 @func43() { 359; CHECK-LABEL: func43: 360; CHECK: .LBB{{[0-9]+}}_2: 361; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 362; CHECK-NEXT: adds.l %s11, 16, %s11 363; CHECK-NEXT: b.l.t (, %s10) 364 %a = alloca i1, align 1 365 %a.val = load i1, ptr %a, align 1 366 %a.conv = zext i1 %a.val to i16 367 ret i16 %a.conv 368} 369 370define signext i32 @func44() { 371; CHECK-LABEL: func44: 372; CHECK: .LBB{{[0-9]+}}_2: 373; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 374; CHECK-NEXT: adds.l %s11, 16, %s11 375; CHECK-NEXT: b.l.t (, %s10) 376 %a = alloca i1, align 1 377 %a.val = load i1, ptr %a, align 1 378 %a.conv = zext i1 %a.val to i32 379 ret i32 %a.conv 380} 381 382define signext i64 @func45() { 383; CHECK-LABEL: func45: 384; CHECK: .LBB{{[0-9]+}}_2: 385; CHECK-NEXT: ld1b.zx %s0, 15(, %s11) 386; CHECK-NEXT: adds.l %s11, 16, %s11 387; CHECK-NEXT: b.l.t (, %s10) 388 %a = alloca i1, align 1 389 %a.val = load i1, ptr %a, align 1 390 %a.conv = zext i1 %a.val to i64 391 ret i64 %a.conv 392} 393