140 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=hexagon < %s | FileCheck %s3 4; Check that a store with a proper addressing mode is selected for various5; cases of storing an immediate value.6 7@var_i8 = global [10 x i8] zeroinitializer, align 88 9define void @store_imm_i8(ptr %p) nounwind {10; CHECK-LABEL: store_imm_i8:11; CHECK: // %bb.0:12; CHECK-NEXT: {13; CHECK-NEXT: jumpr r3114; CHECK-NEXT: memb(r0+#0) = #-115; CHECK-NEXT: }16 store i8 255, ptr %p, align 417 ret void18}19 20define void @store_rr_i8(ptr %p, i32 %x) nounwind {21; CHECK-LABEL: store_rr_i8:22; CHECK: // %bb.0:23; CHECK-NEXT: {24; CHECK-NEXT: r2 = #25525; CHECK-NEXT: jumpr r3126; CHECK-NEXT: memb(r0+r1<<#0) = r2.new27; CHECK-NEXT: }28 %t0 = getelementptr i8, ptr %p, i32 %x29 store i8 255, ptr %t0, align 430 ret void31}32 33define void @store_io_i8(i32 %x) nounwind {34; CHECK-LABEL: store_io_i8:35; CHECK: // %bb.0:36; CHECK-NEXT: {37; CHECK-NEXT: r1 = #25538; CHECK-NEXT: jumpr r3139; CHECK-NEXT: memb(r0+##var_i8) = r1.new40; CHECK-NEXT: }41 %t0 = getelementptr [10 x i8], ptr @var_i8, i32 0, i32 %x42 store i8 255, ptr %t0, align 443 ret void44}45 46define void @store_ur_i8(i32 %x) nounwind {47; CHECK-LABEL: store_ur_i8:48; CHECK: // %bb.0:49; CHECK-NEXT: {50; CHECK-NEXT: r1 = #25551; CHECK-NEXT: jumpr r3152; CHECK-NEXT: memb(r0<<#2+##var_i8) = r1.new53; CHECK-NEXT: }54 %t0 = shl i32 %x, 255 %t1 = getelementptr [10 x i8], ptr @var_i8, i32 0, i32 %t056 store i8 255, ptr %t1, align 457 ret void58}59 60@var_i16 = global [10 x i16] zeroinitializer, align 861 62define void @store_imm_i16(ptr %p) nounwind {63; CHECK-LABEL: store_imm_i16:64; CHECK: // %bb.0:65; CHECK-NEXT: {66; CHECK-NEXT: jumpr r3167; CHECK-NEXT: memh(r0+#0) = #-168; CHECK-NEXT: }69 store i16 65535, ptr %p, align 470 ret void71}72 73define void @store_rr_i16(ptr %p, i32 %x) nounwind {74; CHECK-LABEL: store_rr_i16:75; CHECK: // %bb.0:76; CHECK-NEXT: {77; CHECK-NEXT: r2 = ##6553578; CHECK-NEXT: jumpr r3179; CHECK-NEXT: memh(r0+r1<<#1) = r2.new80; CHECK-NEXT: }81 %t0 = getelementptr i16, ptr %p, i32 %x82 store i16 65535, ptr %t0, align 483 ret void84}85 86define void @store_ur_i16(i32 %x) nounwind {87; CHECK-LABEL: store_ur_i16:88; CHECK: // %bb.0:89; CHECK-NEXT: {90; CHECK-NEXT: r1 = ##6553591; CHECK-NEXT: memh(r0<<#1+##var_i16) = r1.new92; CHECK-NEXT: }93; CHECK-NEXT: {94; CHECK-NEXT: jumpr r3195; CHECK-NEXT: }96 %t0 = getelementptr [10 x i16], ptr @var_i16, i32 0, i32 %x97 store i16 65535, ptr %t0, align 498 ret void99}100 101@var_i32 = global [10 x i32] zeroinitializer, align 8102 103define void @store_imm_i32(ptr %p) nounwind {104; CHECK-LABEL: store_imm_i32:105; CHECK: // %bb.0:106; CHECK-NEXT: {107; CHECK-NEXT: jumpr r31108; CHECK-NEXT: memw(r0+#0) = #-1109; CHECK-NEXT: }110 store i32 4294967295, ptr %p, align 4111 ret void112}113 114define void @store_rr_i32(ptr %p, i32 %x) nounwind {115; CHECK-LABEL: store_rr_i32:116; CHECK: // %bb.0:117; CHECK-NEXT: {118; CHECK-NEXT: r2 = #-1119; CHECK-NEXT: jumpr r31120; CHECK-NEXT: memw(r0+r1<<#2) = r2.new121; CHECK-NEXT: }122 %t0 = getelementptr i32, ptr %p, i32 %x123 store i32 4294967295, ptr %t0, align 4124 ret void125}126 127define void @store_ur_i32(i32 %x) nounwind {128; CHECK-LABEL: store_ur_i32:129; CHECK: // %bb.0:130; CHECK-NEXT: {131; CHECK-NEXT: r1 = #-1132; CHECK-NEXT: jumpr r31133; CHECK-NEXT: memw(r0<<#2+##var_i32) = r1.new134; CHECK-NEXT: }135 %t0 = getelementptr [10 x i32], ptr @var_i32, i32 0, i32 %x136 store i32 4294967295, ptr %t0, align 4137 ret void138}139 140