1;; Tests for invalid or (partially invalid) path clonings with -basic-block-sections. 2 3declare void @effect(i32 zeroext) 4 5;; Test failed application of path cloning. 6; RUN: echo 'v1' > %t1 7; RUN: echo 'f foo' >> %t1 8; RUN: echo 'p 0 2 3' >> %t1 9; RUN: echo 'c 0 2.1 3.1 1' >> %t1 10; RUN: llc < %s -mtriple=x86_64-pc-linux -O0 -function-sections -basic-block-sections=%t1 2> %t1.err | FileCheck %s 11; RUN: FileCheck %s --check-prefixes=WARN1 < %t1.err 12;; Test that valid clonings are applied correctly, even if invalid clonings exist. 13; RUN: echo 'v1' > %t2 14; RUN: echo 'f foo' >> %t2 15; RUN: echo 'p 0 2 3' >> %t2 16; RUN: echo 'p 0 1 2 3' >> %t2 17; RUN: echo 'c 0 1.1 2.2 3.2 2.1 3.1 1' >> %t2 18; RUN: llc < %s -mtriple=x86_64-pc-linux -O0 -function-sections -basic-block-sections=%t2 2> %t2.err | FileCheck %s --check-prefixes=PATH 19; RUN: FileCheck %s --check-prefixes=WARN1 < %t2.err 20; RUN: echo 'v1' > %t3 21; RUN: echo 'f foo' >> %t3 22; RUN: echo 'p 0 100' >> %t3 23; RUN: echo 'c 0 100.1 1' >> %t3 24; RUN: llc < %s -mtriple=x86_64-pc-linux -O0 -function-sections -basic-block-sections=%t3 2> %t3.err | FileCheck %s 25; RUN: FileCheck %s --check-prefixes=WARN2 < %t3.err 26; RUN: echo 'v1' > %t4 27; RUN: echo 'f foo' >> %t4 28; RUN: echo 'p 1 6' >> %t4 29; RUN: echo 'c 0 1 6.1' >> %t4 30; RUN: llc < %s -mtriple=x86_64-pc-linux -O0 -function-sections -basic-block-sections=%t4 2> %t4.err | FileCheck %s 31; RUN: FileCheck %s --check-prefixes=WARN3 < %t4.err 32 33 34 35define void @foo(i1 %a, i1 %b, i1 %c, i1 %d) { 36b0: 37 call void @effect(i32 0) 38 br i1 %a, label %b1, label %b3 39 40b1: ; preds = %b0 41 call void @effect(i32 1) 42 br i1 %b, label %b2, label %b6 43 44b2: ; preds = %b1 45 call void @effect(i32 2) 46 br label %b3 47 48b3: ; preds = %b0, %b2 49 call void @effect(i32 3) 50 br i1 %c, label %b4, label %b5 51 52b4: ; preds = %b3 53 call void @effect(i32 4) 54 callbr void asm sideeffect "je ${0:l}", "!i,~{dirflag},~{fpsr},~{flags}"() 55 to label %b5 [label %b6] 56 57b5: ; preds = %b3, %b4 58 call void @effect(i32 5) 59 ret void 60 61b6: ; preds = %b1, %b4 62 call void @effect(i32 6) 63 ret void 64 65cold: 66 call void @effect(i32 6) ; preds = %b4 67 ret void 68} 69 70; CHECK: .section .text.foo,"ax",@progbits 71; CHECK: foo: 72; CHECK: # %bb.0: # %b0 73 74; CHECK: je .LBB0_3 75; PATH: # %bb.7: # %b1 76; PATH: # %bb.8: # %b2 77; PATH: jne .LBB0_4 78; CHECK: # %bb.1: # %b1 79; CHECK: jne foo.cold 80 81; CHECK: foo.cold: # %b2 82 83;; Check the warnings 84; WARN1: warning: block #2 is not a successor of block #0 in function foo 85; WARN2: warning: no block with id 100 in function foo 86; WARN3: warning: block #6 has its machine block address taken in function foo 87 88