83 lines · plain
1; RUN: llc -mtriple=hexagon -mcpu=hexagonv67t < %s | FileCheck %s2 3; A simple test case for the tiny core instruction latency information.4 5; CHECK-LABEL: test6; CHECK-DAG: [[REG1:r([0-9]+)]] = memw([[REG0:r[0-9]+]]+#0)7; CHECK-DAG: [[REG2:r([0-9]+)]] = memw([[REG0]]+#4)8; CHECK-NEXT: }9; CHECK: {10; CHECK: {11; CHECK-NEXT: = add([[REG2]],[[REG1]])12 13define i32 @test(ptr nocapture readonly %p) local_unnamed_addr #0 {14entry:15 %incdec.ptr = getelementptr inbounds i32, ptr %p, i32 116 %0 = load i32, ptr %p, align 417 %incdec.ptr1 = getelementptr inbounds i32, ptr %p, i32 218 %1 = load i32, ptr %incdec.ptr, align 419 %incdec.ptr2 = getelementptr inbounds i32, ptr %p, i32 320 %2 = load i32, ptr %incdec.ptr1, align 421 %3 = load i32, ptr %incdec.ptr2, align 422 %add = add nsw i32 %1, %023 %add4 = add nsw i32 %3, %224 %mul = mul nsw i32 %add4, %add25 ret i32 %mul26}27 28; CHECK-LABEL: test129; CHECK-DAG: [[REG4:r([0-9]+)]] = memw([[REG3:r[0-9]+]]+#0)30; CHECK-DAG: [[REG5:r([0-9]+)]] = memw([[REG3]]+#4)31; CHECK-NEXT: }32; CHECK: {33; CHECK: {34; CHECK-NEXT: [[REG7:r([0-9]+)]] = add([[REG5]],[[REG4]])35; CHECK: }36; CHECK-NEXT: {37; CHECK-NEXT: = sub([[REG7]]38 39define i32 @test1(ptr nocapture readonly %p) local_unnamed_addr #0 {40entry:41 %incdec.ptr = getelementptr inbounds i32, ptr %p, i32 142 %0 = load i32, ptr %p, align 443 %incdec.ptr1 = getelementptr inbounds i32, ptr %p, i32 244 %1 = load i32, ptr %incdec.ptr, align 445 %incdec.ptr2 = getelementptr inbounds i32, ptr %p, i32 346 %2 = load i32, ptr %incdec.ptr1, align 447 %3 = load i32, ptr %incdec.ptr2, align 448 %add4.neg = add i32 %1, %049 %add = sub i32 %add4.neg, %250 %sub = sub i32 %add, %351 ret i32 %sub52}53 54; Test that multiplies are not placed in the same packet.55; CHECK-LABEL: test256; CHECK: = mpyi57; CHECK: }58; CHECK: = mpyi59; CHECK: }60; CHECK: = mpyi61; CHECK: }62; CHECK: = mpyi63 64define i32 @test2(ptr nocapture readonly %p) local_unnamed_addr #1 {65entry:66 %incdec.ptr = getelementptr inbounds i32, ptr %p, i32 167 %0 = load i32, ptr %p, align 468 %incdec.ptr1 = getelementptr inbounds i32, ptr %p, i32 269 %1 = load i32, ptr %incdec.ptr, align 470 %incdec.ptr2 = getelementptr inbounds i32, ptr %p, i32 371 %2 = load i32, ptr %incdec.ptr1, align 472 %3 = load i32, ptr %incdec.ptr2, align 473 %mul = mul nsw i32 %1, %074 %mul4 = mul nsw i32 %3, %275 %mul5 = mul nsw i32 %3, %076 %mul6 = mul nsw i32 %2, %177 %call = tail call i32 @foo(i32 %mul, i32 %mul4, i32 %mul5, i32 %mul6) #378 ret i32 %call79}80 81declare i32 @foo(i32, i32, i32, i32) local_unnamed_addr #282 83