brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · ad79d9a Raw
75 lines · plain
1; RUN: llc -O1 < %s -mtriple=armv7 -mattr=+db | FileCheck %s2 3@x1 = global i32 0, align 44@x2 = global i32 0, align 45 6define void @test() {7entry:8  br label %for.body9 10for.body:                                         ; preds = %for.body, %entry11  %i.013 = phi i32 [ 1, %entry ], [ %inc6, %for.body ]12  store atomic i32 %i.013, ptr @x1 seq_cst, align 413  store atomic i32 %i.013, ptr @x1 seq_cst, align 414  store atomic i32 %i.013, ptr @x2 seq_cst, align 415  %inc6 = add nsw i32 %i.013, 116  %exitcond = icmp eq i32 %inc6, 217  br i1 %exitcond, label %for.end, label %for.body18 19for.end:                                          ; preds = %for.body20  ret void21 22; The for.body contains 3 seq_cst stores.23; Hence it should have 3 dmb;str;dmb sequences with the middle dmbs collapsed24; CHECK: %for.body25; CHECK-NOT: str26; CHECK: dmb27; CHECK-NOT: dmb28; CHECK: str29 30; CHECK-NOT: str31; CHECK: dmb32; CHECK-NOT: dmb33; CHECK: str34 35; CHECK-NOT: str36; CHECK: dmb37; CHECK-NOT: dmb38; CHECK: str39 40; CHECK-NOT: str41; CHECK: dmb42; CHECK-NOT: dmb43; CHECK-NOT: str44; CHECK: %for.end45}46 47define void @test2() {48  call void @llvm.arm.dmb(i32 11)49  tail call void @test()50  call void @llvm.arm.dmb(i32 11)51  ret void52; the call should prevent the two dmbs from collapsing53; CHECK: test2:54; CHECK: dmb55; CHECK-NEXT: bl56; CHECK-NEXT: dmb57}58 59define void @test3() {60  call void @llvm.arm.dmb(i32 11)61  call void @llvm.arm.dsb(i32 9)62  call void @llvm.arm.dmb(i32 11)63  ret void64; the call should prevent the two dmbs from collapsing65; CHECK: test3:66; CHECK: dmb67; CHECK-NEXT: dsb68; CHECK-NEXT: dmb69 70}71 72 73declare void @llvm.arm.dmb(i32)74declare void @llvm.arm.dsb(i32)75