| ; Test that double word post increment load is not generated. |
| ; REQUIRES: asserts |
| |
| ; REQUIRES: asserts |
| ; RUN: llc -mtriple=hexagon -O2 -debug-only=hexagon-load-store-widening \ |
| ; RUN: %s -o 2>&1 - | FileCheck %s |
| |
| ; Loads with positive invalid postinc is not widened |
| define ptr @test1() { |
| ; CHECK-LABEL: test1 |
| ; CHECK-NOT: memd(r{{[0-9]+}}++ |
| entry: |
| %0 = load ptr, ptr null, align 4 |
| %b = getelementptr i8, ptr %0, i32 20 |
| %1 = load i32, ptr %0, align 8 |
| %c = getelementptr i8, ptr %0, i32 4 |
| %2 = load i32, ptr %c, align 4 |
| %call55 = call i8 @foo(ptr %b, i32 %1, i32 %2) |
| ret ptr null |
| } |
| |
| ; Loads with negative invalid postinc is not widened |
| define ptr @test2() { |
| ; CHECK-LABEL: test2 |
| ; CHECK-NOT: memd(r{{[0-9]+}}++ |
| entry: |
| %0 = load ptr, ptr null, align 4 |
| %b = getelementptr i8, ptr %0, i32 -20 |
| %1 = load i32, ptr %0, align 8 |
| %c = getelementptr i8, ptr %0, i32 4 |
| %2 = load i32, ptr %c, align 4 |
| %call55 = call i8 @foo(ptr %b, i32 %1, i32 %2) |
| ret ptr null |
| } |
| |
| ; Loads with valid positive postinc is widened |
| define ptr @test3() { |
| ; CHECK-LABEL: test3 |
| ; CHECK: memd |
| entry: |
| %0 = load ptr, ptr null, align 4 |
| %b = getelementptr i8, ptr %0, i32 24 |
| %1 = load i32, ptr %0, align 8 |
| %c = getelementptr i8, ptr %0, i32 4 |
| %2 = load i32, ptr %c, align 4 |
| %call55 = call i8 @foo(ptr %b, i32 %1, i32 %2) |
| ret ptr null |
| } |
| |
| ; Loads with valid negative postinc is widened |
| define ptr @test4() { |
| ; CHECK-LABEL: test4 |
| ; CHECK: memd |
| entry: |
| %0 = load ptr, ptr null, align 4 |
| %b = getelementptr i8, ptr %0, i32 -24 |
| %1 = load i32, ptr %0, align 8 |
| %c = getelementptr i8, ptr %0, i32 4 |
| %2 = load i32, ptr %c, align 4 |
| %call55 = call i8 @foo(ptr %b, i32 %1, i32 %2) |
| ret ptr null |
| } |
| |
| declare i8 @foo(ptr, i32, i32) |