190 lines · plain
1; XFAIL: *2; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py3; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -O2 \4; RUN: -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \5; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl6; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -O2 \7; RUN: -ppc-asm-full-reg-names -mcpu=pwr8 < %s | FileCheck %s \8; RUN: --implicit-check-not cmpw --implicit-check-not cmpd --implicit-check-not cmpl9 10; Function Attrs: nounwind11define signext i32 @logic_ne_32(i32 signext %a, i32 signext %b, i32 signext %c) {12; CHECK-LABEL: logic_ne_32:13; CHECK: xor r7, r3, r414; CHECK-NEXT: li r6, 5515; CHECK-NEXT: xor r5, r5, r616; CHECK-NEXT: or r7, r7, r417; CHECK-NEXT: cntlzw r5, r518; CHECK-NEXT: cntlzw r6, r719; CHECK-NEXT: srwi r6, r6, 520; CHECK-NEXT: srwi r5, r5, 521; CHECK-NEXT: or. r5, r6, r522; CHECK-NEXT: bc 4, gt23entry:24 %tobool = icmp eq i32 %a, %b25 %tobool1 = icmp eq i32 %b, 026 %or.cond = and i1 %tobool, %tobool127 %tobool3 = icmp eq i32 %c, 5528 %or.cond5 = or i1 %or.cond, %tobool329 br i1 %or.cond5, label %if.end, label %if.then30 31if.then: ; preds = %entry32 %call = tail call signext i32 @foo(i32 signext %a) #233 br label %return34 35if.end: ; preds = %entry36 %call4 = tail call signext i32 @bar(i32 signext %b) #237 br label %return38 39return: ; preds = %if.end, %if.then40 %retval.0 = phi i32 [ %call4, %if.end ], [ %call, %if.then ]41 ret i32 %retval.042}43 44define void @neg_truncate_i32_eq(ptr %ptr) {45; CHECK-LABEL: neg_truncate_i32_eq:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: lwz r3, 0(r3)48; CHECK-NEXT: rldicl. r3, r3, 0, 6349; CHECK-NEXT: bclr 12, eq, 050; CHECK-NEXT: # %bb.1: # %if.end29.thread13651entry:52 %0 = load i32, ptr %ptr, align 453 %rem17127 = and i32 %0, 154 %cmp18 = icmp eq i32 %rem17127, 055 br label %if.else56 57if.else: ; preds = %entry58 br i1 %cmp18, label %if.end29, label %if.end29.thread13659 60if.end29.thread136: ; preds = %if.else61 unreachable62 63if.end29: ; preds = %if.else64 ret void65 66}67 68; Function Attrs: nounwind69define i64 @logic_eq_64(i64 %a, i64 %b, i64 %c) {70; CHECK-LABEL: logic_eq_64:71; CHECK: xor r7, r3, r472; CHECK-NEXT: li r6, 5573; CHECK-NEXT: xor r5, r5, r674; CHECK-NEXT: or r7, r7, r475; CHECK-NEXT: cntlzd r6, r776; CHECK-NEXT: cntlzd r5, r577; CHECK-NEXT: rldicl r6, r6, 58, 6378; CHECK-NEXT: rldicl r5, r5, 58, 6379; CHECK-NEXT: or. r5, r6, r580; CHECK-NEXT: bc 4, gt81entry:82 %tobool = icmp eq i64 %a, %b83 %tobool1 = icmp eq i64 %b, 084 %or.cond = and i1 %tobool, %tobool185 %tobool3 = icmp eq i64 %c, 5586 %or.cond5 = or i1 %or.cond, %tobool387 br i1 %or.cond5, label %if.end, label %if.then88 89if.then: ; preds = %entry90 %call = tail call i64 @foo64(i64 %a) #291 br label %return92 93if.end: ; preds = %entry94 %call4 = tail call i64 @bar64(i64 %b) #295 br label %return96 97return: ; preds = %if.end, %if.then98 %retval.0 = phi i64 [ %call4, %if.end ], [ %call, %if.then ]99 ret i64 %retval.0100}101 102define void @neg_truncate_i64_eq(ptr %ptr) {103; CHECK-LABEL: neg_truncate_i64_eq:104; CHECK: # %bb.0: # %entry105; CHECK-NEXT: ld r3, 0(r3)106; CHECK-NEXT: rldicl. r3, r3, 0, 63107; CHECK-NEXT: bclr 12, eq, 0108; CHECK-NEXT: # %bb.1: # %if.end29.thread136109entry:110 %0 = load i64, ptr %ptr, align 4111 %rem17127 = and i64 %0, 1112 %cmp18 = icmp eq i64 %rem17127, 0113 br label %if.else114 115if.else: ; preds = %entry116 br i1 %cmp18, label %if.end29, label %if.end29.thread136117 118if.end29.thread136: ; preds = %if.else119 unreachable120 121if.end29: ; preds = %if.else122 ret void123 124}125 126; Function Attrs: nounwind127define i64 @logic_ne_64(i64 %a, i64 %b, i64 %c) {128; CHECK-LABEL: logic_ne_64:129; CHECK: xor r7, r3, r4130; CHECK-NEXT: li r6, 55131; CHECK-NEXT: addic r8, r7, -1132; CHECK-NEXT: xor r5, r5, r6133; CHECK-NEXT: subfe r7, r8, r7134; CHECK-NEXT: cntlzd r5, r5135; CHECK-NEXT: addic r12, r4, -1136; CHECK-NEXT: rldicl r5, r5, 58, 63137; CHECK-NEXT: subfe r6, r12, r4138; CHECK-NEXT: and r6, r7, r6139; CHECK-NEXT: or. r5, r6, r5140; CHECK-NEXT: bc 4, gt141entry:142 %tobool = icmp ne i64 %a, %b143 %tobool1 = icmp ne i64 %b, 0144 %or.cond = and i1 %tobool, %tobool1145 %tobool3 = icmp eq i64 %c, 55146 %or.cond5 = or i1 %or.cond, %tobool3147 br i1 %or.cond5, label %if.end, label %if.then148 149if.then: ; preds = %entry150 %call = tail call i64 @foo64(i64 %a) #2151 br label %return152 153if.end: ; preds = %entry154 %call4 = tail call i64 @bar64(i64 %b) #2155 br label %return156 157return: ; preds = %if.end, %if.then158 %retval.0 = phi i64 [ %call4, %if.end ], [ %call, %if.then ]159 ret i64 %retval.0160}161 162define void @neg_truncate_i64_ne(ptr %ptr) {163; CHECK-LABEL: neg_truncate_i64_ne:164; CHECK: # %bb.0: # %entry165; CHECK-NEXT: ld r3, 0(r3)166; CHECK-NEXT: andi. r3, r3, 1167; CHECK-NEXT: bclr 12, gt, 0168; CHECK-NEXT: # %bb.1: # %if.end29.thread136169entry:170 %0 = load i64, ptr %ptr, align 4171 %rem17127 = and i64 %0, 1172 %cmp18 = icmp ne i64 %rem17127, 0173 br label %if.else174 175if.else: ; preds = %entry176 br i1 %cmp18, label %if.end29, label %if.end29.thread136177 178if.end29.thread136: ; preds = %if.else179 unreachable180 181if.end29: ; preds = %if.else182 ret void183 184}185 186declare signext i32 @foo(i32 signext)187declare signext i32 @bar(i32 signext)188declare i64 @foo64(i64)189declare i64 @bar64(i64)190