1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=i686-- -verify-machineinstrs < %s | FileCheck %s 3 4define i32 @duplicate_normal_and_indirect_dest(i32 %a) { 5; CHECK-LABEL: duplicate_normal_and_indirect_dest: 6; CHECK: # %bb.0: # %entry 7; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 8; CHECK-NEXT: addl $4, %eax 9; CHECK-NEXT: #APP 10; CHECK-NEXT: xorl %eax, %eax 11; CHECK-NEXT: jmp .LBB0_1 12; CHECK-NEXT: #NO_APP 13; CHECK-NEXT: .LBB0_1: # Block address taken 14; CHECK-NEXT: # %fail 15; CHECK-NEXT: # Label of block must be emitted 16; CHECK-NEXT: movl $1, %eax 17; CHECK-NEXT: retl 18entry: 19 %0 = add i32 %a, 4 20 callbr void asm "xorl $0, $0; jmp ${1:l}", "r,!i,~{dirflag},~{fpsr},~{flags}"(i32 %0) to label %fail [label %fail] 21 22fail: 23 ret i32 1 24} 25 26define i32 @duplicate_indirect_dest(i32 %a) { 27; CHECK-LABEL: duplicate_indirect_dest: 28; CHECK: # %bb.0: # %entry 29; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 30; CHECK-NEXT: addl $4, %eax 31; CHECK-NEXT: #APP 32; CHECK-NEXT: xorl %eax, %eax 33; CHECK-NEXT: jmp .LBB1_2 34; CHECK-NEXT: jmp .LBB1_2 35; CHECK-NEXT: #NO_APP 36; CHECK-NEXT: # %bb.1: # %normal 37; CHECK-NEXT: retl 38; CHECK-NEXT: .LBB1_2: # Block address taken 39; CHECK-NEXT: # %fail 40; CHECK-NEXT: # Label of block must be emitted 41; CHECK-NEXT: movl $1, %eax 42; CHECK-NEXT: retl 43entry: 44 %0 = add i32 %a, 4 45 callbr void asm "xorl $0, $0; jmp ${1:l}; jmp ${2:l}", "r,!i,!i,~{dirflag},~{fpsr},~{flags}"(i32 %0) to label %normal [label %fail, label %fail] 46 47normal: 48 ret i32 %0 49 50fail: 51 ret i32 1 52} 53