132 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42; RUN: llc -mtriple=x86_64-pc-linux-gnu -verify-coalescing < %s | FileCheck %s3 4%"class.llvm::APInt." = type <{ %union.anon., i32, [4 x i8] }>5%union.anon. = type { i64 }6 7define void @_ZNK4llvm5APInt21multiplicativeInverseERKS0_(ptr %r) {8; CHECK-LABEL: _ZNK4llvm5APInt21multiplicativeInverseERKS0_:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: xorl %edx, %edx11; CHECK-NEXT: xorl %eax, %eax12; CHECK-NEXT: xorl %ecx, %ecx13; CHECK-NEXT: jmp .LBB0_114; CHECK-NEXT: .p2align 415; CHECK-NEXT: .LBB0_4: # %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i16; CHECK-NEXT: # in Loop: Header=BB0_1 Depth=117; CHECK-NEXT: movl %edx, %edx18; CHECK-NEXT: shlq $4, %rdx19; CHECK-NEXT: movl $0, (%rdi,%rdx)20; CHECK-NEXT: movl %ecx, %edx21; CHECK-NEXT: .LBB0_1: # %bb22; CHECK-NEXT: # =>This Loop Header: Depth=123; CHECK-NEXT: # Child Loop BB0_3 Depth 224; CHECK-NEXT: xorl $1, %ecx25; CHECK-NEXT: xorl %esi, %esi26; CHECK-NEXT: movq %rcx, %r827; CHECK-NEXT: testb %al, %al28; CHECK-NEXT: jne .LBB0_429; CHECK-NEXT: .p2align 430; CHECK-NEXT: .LBB0_3: # %for.body.i.i.i.i.i.331; CHECK-NEXT: # Parent Loop BB0_1 Depth=132; CHECK-NEXT: # => This Inner Loop Header: Depth=233; CHECK-NEXT: orq $1, %r834; CHECK-NEXT: orq $1, %rsi35; CHECK-NEXT: testb %al, %al36; CHECK-NEXT: je .LBB0_337; CHECK-NEXT: jmp .LBB0_438entry:39 br label %bb40 41bb: ; preds = %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i, %entry42 %i.0 = phi i32 [ 0, %entry ], [ %xor, %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i ]43 %xor = xor i32 %i.0, 144 %idxprom = zext nneg i32 %xor to i6445 br label %for.body.i.i.i.i.i46 47for.body.i.i.i.i.i: ; preds = %for.body.i.i.i.i.i.3, %bb48 %lsr.iv37 = phi i64 [ %lsr.iv.next38, %for.body.i.i.i.i.i.3 ], [ 0, %bb ]49 %lsr.iv = phi i64 [ %lsr.iv.next, %for.body.i.i.i.i.i.3 ], [ %idxprom, %bb ]50 %exitcond.not.i.i.i.i.i.2 = icmp eq i64 0, 151 br i1 %exitcond.not.i.i.i.i.i.2, label %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i, label %for.body.i.i.i.i.i.352 53for.body.i.i.i.i.i.3: ; preds = %for.body.i.i.i.i.i54 %sunkaddr55 = mul i64 %lsr.iv37, 055 %i = xor i64 %lsr.iv, 056 %lsr.iv.next = or i64 %lsr.iv, 157 %lsr.iv.next38 = or i64 %lsr.iv37, 158 br label %for.body.i.i.i.i.i59 60_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i: ; preds = %for.body.i.i.i.i.i61 %idxprom12 = zext nneg i32 %i.0 to i6462 %arrayidx13 = getelementptr [2 x %"class.llvm::APInt."], ptr %r, i64 0, i64 %idxprom1263 store i32 0, ptr %arrayidx13, align 464 br label %bb65}66 67; This variant hit an assert and never reached the verifier error68define void @_ZNK4llvm5APInt21multiplicativeInverseERKS0__assert(ptr %r) {69; CHECK-LABEL: _ZNK4llvm5APInt21multiplicativeInverseERKS0__assert:70; CHECK: # %bb.0: # %entry71; CHECK-NEXT: xorl %edx, %edx72; CHECK-NEXT: xorl %eax, %eax73; CHECK-NEXT: xorl %ecx, %ecx74; CHECK-NEXT: jmp .LBB1_175; CHECK-NEXT: .p2align 476; CHECK-NEXT: .LBB1_4: # %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i77; CHECK-NEXT: # in Loop: Header=BB1_1 Depth=178; CHECK-NEXT: movl %edx, %edx79; CHECK-NEXT: shlq $4, %rdx80; CHECK-NEXT: movl $0, (%rdi,%rdx)81; CHECK-NEXT: movl %ecx, %edx82; CHECK-NEXT: .LBB1_1: # %bb83; CHECK-NEXT: # =>This Loop Header: Depth=184; CHECK-NEXT: # Child Loop BB1_3 Depth 285; CHECK-NEXT: xorl $1, %ecx86; CHECK-NEXT: movq %rcx, %rsi87; CHECK-NEXT: shlq $4, %rsi88; CHECK-NEXT: movq (%rsi), %rsi89; CHECK-NEXT: xorl %r8d, %r8d90; CHECK-NEXT: testb %al, %al91; CHECK-NEXT: jne .LBB1_492; CHECK-NEXT: .p2align 493; CHECK-NEXT: .LBB1_3: # %for.body.i.i.i.i.i.394; CHECK-NEXT: # Parent Loop BB1_1 Depth=195; CHECK-NEXT: # => This Inner Loop Header: Depth=296; CHECK-NEXT: orq $1, %rsi97; CHECK-NEXT: orq $1, %r898; CHECK-NEXT: testb %al, %al99; CHECK-NEXT: je .LBB1_3100; CHECK-NEXT: jmp .LBB1_4101entry:102 br label %bb103 104bb: ; preds = %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i, %entry105 %i.0 = phi i32 [ 0, %entry ], [ %xor, %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i ]106 %xor = xor i32 %i.0, 1107 %idxprom = zext nneg i32 %xor to i64108 %arrayidx = getelementptr [2 x %"class.llvm::APInt."], ptr null, i64 0, i64 %idxprom109 %i.i.i.i.i.i = load ptr, ptr %arrayidx, align 16110 %i.i.i.i.i.i36 = ptrtoint ptr %i.i.i.i.i.i to i64111 br label %for.body.i.i.i.i.i112 113for.body.i.i.i.i.i: ; preds = %for.body.i.i.i.i.i.3, %bb114 %lsr.iv37 = phi i64 [ %lsr.iv.next38, %for.body.i.i.i.i.i.3 ], [ 0, %bb ]115 %lsr.iv = phi i64 [ %lsr.iv.next, %for.body.i.i.i.i.i.3 ], [ %i.i.i.i.i.i36, %bb ]116 %exitcond.not.i.i.i.i.i.2 = icmp eq i64 0, 1117 br i1 %exitcond.not.i.i.i.i.i.2, label %_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i, label %for.body.i.i.i.i.i.3118 119for.body.i.i.i.i.i.3: ; preds = %for.body.i.i.i.i.i120 %sunkaddr55 = mul i64 %lsr.iv37, 0121 %i = xor i64 %lsr.iv, 0122 %lsr.iv.next = or i64 %lsr.iv, 1123 %lsr.iv.next38 = or i64 %lsr.iv37, 1124 br label %for.body.i.i.i.i.i125 126_ZNK4llvm5APInt13getActiveBitsEv.exit.i.i: ; preds = %for.body.i.i.i.i.i127 %idxprom12 = zext nneg i32 %i.0 to i64128 %arrayidx13 = getelementptr [2 x %"class.llvm::APInt."], ptr %r, i64 0, i64 %idxprom12129 store i32 0, ptr %arrayidx13, align 4130 br label %bb131}132