1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-- | FileCheck %s 3 4; This tests some cases where BT must not be generated. See also bt.ll. 5; Fixes 20040709-[12].c in gcc testsuite. 6 7define void @test2(i32 %x, i32 %n) nounwind { 8; CHECK-LABEL: test2: 9; CHECK: # %bb.0: # %entry 10; CHECK-NEXT: xorl %eax, %eax 11; CHECK-NEXT: testb %al, %al 12; CHECK-NEXT: jne .LBB0_2 13; CHECK-NEXT: # %bb.1: # %bb 14; CHECK-NEXT: calll foo 15; CHECK-NEXT: .LBB0_2: # %UnifiedReturnBlock 16; CHECK-NEXT: retl 17entry: 18 %tmp1 = and i32 %x, 1 19 %tmp2 = urem i32 %tmp1, 15 20 %tmp3 = and i32 %tmp2, 1 ; <i32> [#uses=1] 21 %tmp4 = icmp eq i32 %tmp3, %tmp2 ; <i1> [#uses=1] 22 br i1 %tmp4, label %bb, label %UnifiedReturnBlock 23 24bb: ; preds = %entry 25 call void @foo() 26 ret void 27 28UnifiedReturnBlock: ; preds = %entry 29 ret void 30} 31 32define void @test3(i32 %x, i32 %n) nounwind { 33; CHECK-LABEL: test3: 34; CHECK: # %bb.0: # %entry 35; CHECK-NEXT: xorl %eax, %eax 36; CHECK-NEXT: testb %al, %al 37; CHECK-NEXT: jne .LBB1_2 38; CHECK-NEXT: # %bb.1: # %bb 39; CHECK-NEXT: calll foo 40; CHECK-NEXT: .LBB1_2: # %UnifiedReturnBlock 41; CHECK-NEXT: retl 42entry: 43 %tmp1 = and i32 %x, 1 44 %tmp2 = urem i32 %tmp1, 15 45 %tmp3 = and i32 %tmp2, 1 ; <i32> [#uses=1] 46 %tmp4 = icmp eq i32 %tmp2, %tmp3 ; <i1> [#uses=1] 47 br i1 %tmp4, label %bb, label %UnifiedReturnBlock 48 49bb: ; preds = %entry 50 call void @foo() 51 ret void 52 53UnifiedReturnBlock: ; preds = %entry 54 ret void 55} 56 57define void @test4(i32 %x, i32 %n) nounwind { 58; CHECK-LABEL: test4: 59; CHECK: # %bb.0: # %entry 60; CHECK-NEXT: movb $1, %al 61; CHECK-NEXT: testb %al, %al 62; CHECK-NEXT: jne .LBB2_2 63; CHECK-NEXT: # %bb.1: # %bb 64; CHECK-NEXT: calll foo 65; CHECK-NEXT: .LBB2_2: # %UnifiedReturnBlock 66; CHECK-NEXT: retl 67entry: 68 %tmp1 = and i32 %x, 1 69 %tmp2 = urem i32 %tmp1, 15 70 %tmp3 = and i32 %tmp2, 1 ; <i32> [#uses=1] 71 %tmp4 = icmp ne i32 %tmp2, %tmp3 ; <i1> [#uses=1] 72 br i1 %tmp4, label %bb, label %UnifiedReturnBlock 73 74bb: ; preds = %entry 75 call void @foo() 76 ret void 77 78UnifiedReturnBlock: ; preds = %entry 79 ret void 80} 81 82define void @test5(i32 %x, i32 %n) nounwind { 83; CHECK-LABEL: test5: 84; CHECK: # %bb.0: # %entry 85; CHECK-NEXT: movb $1, %al 86; CHECK-NEXT: testb %al, %al 87; CHECK-NEXT: jne .LBB3_2 88; CHECK-NEXT: # %bb.1: # %bb 89; CHECK-NEXT: calll foo 90; CHECK-NEXT: .LBB3_2: # %UnifiedReturnBlock 91; CHECK-NEXT: retl 92entry: 93 %tmp1 = and i32 %x, 1 94 %tmp2 = urem i32 %tmp1, 15 95 %tmp3 = and i32 %tmp2, 1 ; <i32> [#uses=1] 96 %tmp4 = icmp ne i32 %tmp2, %tmp3 ; <i1> [#uses=1] 97 br i1 %tmp4, label %bb, label %UnifiedReturnBlock 98 99bb: ; preds = %entry 100 call void @foo() 101 ret void 102 103UnifiedReturnBlock: ; preds = %entry 104 ret void 105} 106 107declare void @foo() 108