73 lines · plain
1; RUN: llc -mtriple=hexagon -O3 -hexagon-small-data-threshold=0 < %s | FileCheck %s2; This test checks the case if there are more than 2 uses of a constan address, move the3; value in to a register and replace all instances of constant with the register.4; The GenMemAbsolute pass generates a absolute-set instruction if there are more5; than 2 uses of this register.6 7; CHECK: storetrunci32_38; CHECK-NOT: memw(##441652) = r{{[0-9]+}}9; CHECK-NOT: memw(r{{[0-9]+}}+#0) = r{{[0-9]+}}10; CHECK:memw(r[[REG:[0-9]+]]=##441652) = r{{[0-9]+}}11; CHECK-NOT: memw(##441652) = r{{[0-9]+}}12; CHECK:memw(r[[REG]]+#0) = r{{[0-9]+}}13; CHECK-NOT: memw(##441652) = r{{[0-9]+}}14; CHECK:memw(r[[REG]]+#0) = r{{[0-9]+}}15; CHECK-NOT: memw(##441652) = r{{[0-9]+}}16 17define void @storetrunci32_3(i64 %descr_addr, i32 %rpm_or_sys, i32 %kkr) #0 {18entry:19 %conv = trunc i64 %descr_addr to i3220 store volatile i32 %conv, ptr inttoptr (i32 441652 to ptr), align 421 store volatile i32 %rpm_or_sys, ptr inttoptr (i32 441652 to ptr), align 422 store volatile i32 %kkr, ptr inttoptr (i32 441652 to ptr), align 423 ret void24}25 26; CHECK: storetrunci32_227; CHECK-NOT: r{{[0-9]+}} = ##44165228; CHECK: memw(##441652) = r{{[0-9]+}}29; CHECK: memw(##441652) = r{{[0-9]+}}30 31define void @storetrunci32_2(i64 %descr_addr, i32 %rpm_or_sys) #0 {32entry:33 %conv = trunc i64 %descr_addr to i3234 store volatile i32 %conv, ptr inttoptr (i32 441652 to ptr), align 435 store volatile i32 %rpm_or_sys, ptr inttoptr (i32 441652 to ptr), align 436 ret void37}38 39; CHECK: storetrunci32_abs_global_340; CHECK-NOT: memw(##globalInt) = r{{[0-9]+}}41; CHECK-NOT: memw(r{{[0-9]+}}+#0) = r{{[0-9]+}}42; CHECK:memw(r[[REG:[0-9]+]]=##globalInt) = r{{[0-9]+}}43; CHECK-NOT: memw(##globalInt) = r{{[0-9]+}}44; CHECK:memw(r[[REG]]+#0) = r{{[0-9]+}}45; CHECK-NOT: memw(##globalInt) = r{{[0-9]+}}46; CHECK:memw(r[[REG]]+#0) = r{{[0-9]+}}47; CHECK-NOT: memw(##globalInt) = r{{[0-9]+}}48 49@globalInt = external global i32, align 850define void @storetrunci32_abs_global_3(i64 %descr_addr, i32 %rpm_or_sys, i32 %kkr) #0 {51entry:52 %conv = trunc i64 %descr_addr to i3253 store volatile i32 %conv, ptr @globalInt, align 454 store volatile i32 %rpm_or_sys, ptr @globalInt, align 455 store volatile i32 %kkr, ptr @globalInt, align 456 ret void57}58 59; CHECK: storetrunci32_abs_global_260; CHECK-NOT:r[[REG:[0-9]+]] = ##globalInt61; CHECK:memw(##globalInt) = r{{[0-9]+}}62; CHECK:memw(##globalInt) = r{{[0-9]+}}63 64define void @storetrunci32_abs_global_2(i64 %descr_addr, i32 %rpm_or_sys) #0 {65entry:66 %conv = trunc i64 %descr_addr to i3267 store volatile i32 %conv, ptr @globalInt, align 468 store volatile i32 %rpm_or_sys, ptr @globalInt, align 469 ret void70}71 72attributes #0 = { nounwind }73