brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 173308d Raw
245 lines · plain
1; RUN: llc -mtriple=aarch64-- -O0 -fast-isel -fast-isel-abort=4 -verify-machineinstrs < %s | FileCheck %s2; RUN: llc -mtriple=aarch64-- -O0 -fast-isel=0 -global-isel=false -verify-machineinstrs < %s | FileCheck %s3 4; Note that checking SelectionDAG output isn't strictly necessary, but they5; currently match, so we might as well check both!  Feel free to remove SDAG.6 7; CHECK-LABEL: atomic_store_monotonic_8:8; CHECK-NEXT: // %bb.0:9; CHECK-NEXT:  strb  w1, [x0]10; CHECK-NEXT:  ret11define void @atomic_store_monotonic_8(ptr %p, i8 %val) #0 {12  store atomic i8 %val, ptr %p monotonic, align 113  ret void14}15 16; CHECK-LABEL: atomic_store_monotonic_8_off:17; CHECK-NEXT: // %bb.0:18; CHECK-NEXT:  strb w1, [x0, #1]19; CHECK-NEXT:  ret20define void @atomic_store_monotonic_8_off(ptr %p, i8 %val) #0 {21  %tmp0 = getelementptr i8, ptr %p, i32 122  store atomic i8 %val, ptr %tmp0 monotonic, align 123  ret void24}25 26; CHECK-LABEL: atomic_store_monotonic_16:27; CHECK-NEXT: // %bb.0:28; CHECK-NEXT:  strh  w1, [x0]29; CHECK-NEXT:  ret30define void @atomic_store_monotonic_16(ptr %p, i16 %val) #0 {31  store atomic i16 %val, ptr %p monotonic, align 232  ret void33}34 35; CHECK-LABEL: atomic_store_monotonic_16_off:36; CHECK-NEXT: // %bb.0:37; CHECK-NEXT:  strh w1, [x0, #2]38; CHECK-NEXT:  ret39define void @atomic_store_monotonic_16_off(ptr %p, i16 %val) #0 {40  %tmp0 = getelementptr i16, ptr %p, i32 141  store atomic i16 %val, ptr %tmp0 monotonic, align 242  ret void43}44 45; CHECK-LABEL: atomic_store_monotonic_32:46; CHECK-NEXT: // %bb.0:47; CHECK-NEXT:  str  w1, [x0]48; CHECK-NEXT:  ret49define void @atomic_store_monotonic_32(ptr %p, i32 %val) #0 {50  store atomic i32 %val, ptr %p monotonic, align 451  ret void52}53 54; CHECK-LABEL: atomic_store_monotonic_32_off:55; CHECK-NEXT: // %bb.0:56; CHECK-NEXT:  str w1, [x0, #4]57; CHECK-NEXT:  ret58define void @atomic_store_monotonic_32_off(ptr %p, i32 %val) #0 {59  %tmp0 = getelementptr i32, ptr %p, i32 160  store atomic i32 %val, ptr %tmp0 monotonic, align 461  ret void62}63 64; CHECK-LABEL: atomic_store_monotonic_64:65; CHECK-NEXT: // %bb.0:66; CHECK-NEXT:  str  x1, [x0]67; CHECK-NEXT:  ret68define void @atomic_store_monotonic_64(ptr %p, i64 %val) #0 {69  store atomic i64 %val, ptr %p monotonic, align 870  ret void71}72 73; CHECK-LABEL: atomic_store_monotonic_64_off:74; CHECK-NEXT: // %bb.0:75; CHECK-NEXT:  str x1, [x0, #8]76; CHECK-NEXT:  ret77define void @atomic_store_monotonic_64_off(ptr %p, i64 %val) #0 {78  %tmp0 = getelementptr i64, ptr %p, i32 179  store atomic i64 %val, ptr %tmp0 monotonic, align 880  ret void81}82 83; CHECK-LABEL: atomic_store_release_8:84; CHECK-NEXT: // %bb.0:85; CHECK-NEXT:  stlrb w1, [x0]86; CHECK-NEXT:  ret87define void @atomic_store_release_8(ptr %p, i8 %val) #0 {88  store atomic i8 %val, ptr %p release, align 189  ret void90}91 92; CHECK-LABEL: atomic_store_release_8_off:93; CHECK-NEXT: // %bb.0:94; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #195; CHECK-NEXT:  stlrb w1, [[[REG0]]]96; CHECK-NEXT:  ret97define void @atomic_store_release_8_off(ptr %p, i8 %val) #0 {98  %tmp0 = getelementptr i8, ptr %p, i32 199  store atomic i8 %val, ptr %tmp0 release, align 1100  ret void101}102 103; CHECK-LABEL: atomic_store_release_16:104; CHECK-NEXT: // %bb.0:105; CHECK-NEXT:  stlrh w1, [x0]106; CHECK-NEXT:  ret107define void @atomic_store_release_16(ptr %p, i16 %val) #0 {108  store atomic i16 %val, ptr %p release, align 2109  ret void110}111 112; CHECK-LABEL: atomic_store_release_16_off:113; CHECK-NEXT: // %bb.0:114; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #2115; CHECK-NEXT:  stlrh w1, [[[REG0]]]116; CHECK-NEXT:  ret117define void @atomic_store_release_16_off(ptr %p, i16 %val) #0 {118  %tmp0 = getelementptr i16, ptr %p, i32 1119  store atomic i16 %val, ptr %tmp0 release, align 2120  ret void121}122 123; CHECK-LABEL: atomic_store_release_32:124; CHECK-NEXT: // %bb.0:125; CHECK-NEXT:  stlr w1, [x0]126; CHECK-NEXT:  ret127define void @atomic_store_release_32(ptr %p, i32 %val) #0 {128  store atomic i32 %val, ptr %p release, align 4129  ret void130}131 132; CHECK-LABEL: atomic_store_release_32_off:133; CHECK-NEXT: // %bb.0:134; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #4135; CHECK-NEXT:  stlr w1, [[[REG0]]]136; CHECK-NEXT:  ret137define void @atomic_store_release_32_off(ptr %p, i32 %val) #0 {138  %tmp0 = getelementptr i32, ptr %p, i32 1139  store atomic i32 %val, ptr %tmp0 release, align 4140  ret void141}142 143; CHECK-LABEL: atomic_store_release_64:144; CHECK-NEXT: // %bb.0:145; CHECK-NEXT:  stlr x1, [x0]146; CHECK-NEXT:  ret147define void @atomic_store_release_64(ptr %p, i64 %val) #0 {148  store atomic i64 %val, ptr %p release, align 8149  ret void150}151 152; CHECK-LABEL: atomic_store_release_64_off:153; CHECK-NEXT: // %bb.0:154; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #8155; CHECK-NEXT:  stlr x1, [[[REG0]]]156; CHECK-NEXT:  ret157define void @atomic_store_release_64_off(ptr %p, i64 %val) #0 {158  %tmp0 = getelementptr i64, ptr %p, i32 1159  store atomic i64 %val, ptr %tmp0 release, align 8160  ret void161}162 163 164; CHECK-LABEL: atomic_store_seq_cst_8:165; CHECK-NEXT: // %bb.0:166; CHECK-NEXT:  stlrb w1, [x0]167; CHECK-NEXT:  ret168define void @atomic_store_seq_cst_8(ptr %p, i8 %val) #0 {169  store atomic i8 %val, ptr %p seq_cst, align 1170  ret void171}172 173; CHECK-LABEL: atomic_store_seq_cst_8_off:174; CHECK-NEXT: // %bb.0:175; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #1176; CHECK-NEXT:  stlrb w1, [[[REG0]]]177; CHECK-NEXT:  ret178define void @atomic_store_seq_cst_8_off(ptr %p, i8 %val) #0 {179  %tmp0 = getelementptr i8, ptr %p, i32 1180  store atomic i8 %val, ptr %tmp0 seq_cst, align 1181  ret void182}183 184; CHECK-LABEL: atomic_store_seq_cst_16:185; CHECK-NEXT: // %bb.0:186; CHECK-NEXT:  stlrh w1, [x0]187; CHECK-NEXT:  ret188define void @atomic_store_seq_cst_16(ptr %p, i16 %val) #0 {189  store atomic i16 %val, ptr %p seq_cst, align 2190  ret void191}192 193; CHECK-LABEL: atomic_store_seq_cst_16_off:194; CHECK-NEXT: // %bb.0:195; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #2196; CHECK-NEXT:  stlrh w1, [[[REG0]]]197; CHECK-NEXT:  ret198define void @atomic_store_seq_cst_16_off(ptr %p, i16 %val) #0 {199  %tmp0 = getelementptr i16, ptr %p, i32 1200  store atomic i16 %val, ptr %tmp0 seq_cst, align 2201  ret void202}203 204; CHECK-LABEL: atomic_store_seq_cst_32:205; CHECK-NEXT: // %bb.0:206; CHECK-NEXT:  stlr w1, [x0]207; CHECK-NEXT:  ret208define void @atomic_store_seq_cst_32(ptr %p, i32 %val) #0 {209  store atomic i32 %val, ptr %p seq_cst, align 4210  ret void211}212 213; CHECK-LABEL: atomic_store_seq_cst_32_off:214; CHECK-NEXT: // %bb.0:215; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #4216; CHECK-NEXT:  stlr w1, [[[REG0]]]217; CHECK-NEXT:  ret218define void @atomic_store_seq_cst_32_off(ptr %p, i32 %val) #0 {219  %tmp0 = getelementptr i32, ptr %p, i32 1220  store atomic i32 %val, ptr %tmp0 seq_cst, align 4221  ret void222}223 224; CHECK-LABEL: atomic_store_seq_cst_64:225; CHECK-NEXT: // %bb.0:226; CHECK-NEXT:  stlr x1, [x0]227; CHECK-NEXT:  ret228define void @atomic_store_seq_cst_64(ptr %p, i64 %val) #0 {229  store atomic i64 %val, ptr %p seq_cst, align 8230  ret void231}232 233; CHECK-LABEL: atomic_store_seq_cst_64_off:234; CHECK-NEXT: // %bb.0:235; CHECK-NEXT:  add [[REG0:x[0-9]+]], x0, #8236; CHECK-NEXT:  stlr x1, [[[REG0]]]237; CHECK-NEXT:  ret238define void @atomic_store_seq_cst_64_off(ptr %p, i64 %val) #0 {239  %tmp0 = getelementptr i64, ptr %p, i32 1240  store atomic i64 %val, ptr %tmp0 seq_cst, align 8241  ret void242}243 244attributes #0 = { nounwind }245