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