191 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN: -mcpu=pwr8 < %s | FileCheck %s4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr8 \5; RUN: < %s -vec-extabi | FileCheck %s6 7%class.PB2 = type { [1 x i32], ptr }8%class.PB1 = type { [1 x i32], i64, i64, i32 }9 10; Function Attrs: norecurse nounwind readonly11define zeroext i1 @test1(ptr %s_a, ptr %s_b) local_unnamed_addr #0 {12; CHECK-LABEL: test1:13; CHECK: # %bb.0: # %entry14; CHECK-NEXT: lwz 3, 0(3)15; CHECK-NEXT: lwz 4, 0(4)16; CHECK-NEXT: rlwinm 3, 3, 0, 28, 2817; CHECK-NEXT: rlwinm 4, 4, 0, 28, 2818; CHECK-NEXT: sub 3, 3, 419; CHECK-NEXT: rldicl 3, 3, 1, 6320; CHECK-NEXT: blr21entry:22 %0 = load i32, ptr %s_a, align 8, !tbaa !123 %and.i = and i32 %0, 824 %1 = load i32, ptr %s_b, align 8, !tbaa !125 %and.i4 = and i32 %1, 826 %cmp.i5 = icmp ult i32 %and.i, %and.i427 ret i1 %cmp.i528}29 30; Function Attrs: norecurse nounwind readonly31define zeroext i1 @test2(ptr %s_a, ptr %s_b) local_unnamed_addr #0 {32; CHECK-LABEL: test2:33; CHECK: # %bb.0: # %entry34; CHECK-NEXT: lwz 3, 0(3)35; CHECK-NEXT: lwz 4, 0(4)36; CHECK-NEXT: rlwinm 3, 3, 0, 28, 2837; CHECK-NEXT: rlwinm 4, 4, 0, 28, 2838; CHECK-NEXT: sub 3, 4, 339; CHECK-NEXT: not 3, 340; CHECK-NEXT: rldicl 3, 3, 1, 6341; CHECK-NEXT: blr42entry:43 %0 = load i32, ptr %s_a, align 8, !tbaa !144 %and.i = and i32 %0, 845 %1 = load i32, ptr %s_b, align 8, !tbaa !146 %and.i4 = and i32 %1, 847 %cmp.i5 = icmp ule i32 %and.i, %and.i448 ret i1 %cmp.i549}50 51; Function Attrs: norecurse nounwind readonly52define zeroext i1 @test3(ptr %s_a, ptr %s_b) local_unnamed_addr #0 {53; CHECK-LABEL: test3:54; CHECK: # %bb.0: # %entry55; CHECK-NEXT: lwz 3, 0(3)56; CHECK-NEXT: lwz 4, 0(4)57; CHECK-NEXT: rlwinm 3, 3, 0, 28, 2858; CHECK-NEXT: rlwinm 4, 4, 0, 28, 2859; CHECK-NEXT: sub 3, 4, 360; CHECK-NEXT: rldicl 3, 3, 1, 6361; CHECK-NEXT: blr62entry:63 %0 = load i32, ptr %s_a, align 8, !tbaa !164 %and.i = and i32 %0, 865 %1 = load i32, ptr %s_b, align 8, !tbaa !166 %and.i4 = and i32 %1, 867 %cmp.i5 = icmp ugt i32 %and.i, %and.i468 ret i1 %cmp.i569}70 71; Function Attrs: norecurse nounwind readonly72define zeroext i1 @test4(ptr %s_a, ptr %s_b) local_unnamed_addr #0 {73; CHECK-LABEL: test4:74; CHECK: # %bb.0: # %entry75; CHECK-NEXT: lwz 3, 0(3)76; CHECK-NEXT: lwz 4, 0(4)77; CHECK-NEXT: rlwinm 3, 3, 0, 28, 2878; CHECK-NEXT: rlwinm 4, 4, 0, 28, 2879; CHECK-NEXT: sub 3, 3, 480; CHECK-NEXT: not 3, 381; CHECK-NEXT: rldicl 3, 3, 1, 6382; CHECK-NEXT: blr83entry:84 %0 = load i32, ptr %s_a, align 8, !tbaa !185 %and.i = and i32 %0, 886 %1 = load i32, ptr %s_b, align 8, !tbaa !187 %and.i4 = and i32 %1, 888 %cmp.i5 = icmp uge i32 %and.i, %and.i489 ret i1 %cmp.i590}91 92define zeroext i1 @test5(i64 %a) {93; CHECK-LABEL: test5:94; CHECK: # %bb.0: # %entry95; CHECK-NEXT: li 4, -196; CHECK-NEXT: addis 3, 3, -3276897; CHECK-NEXT: rldic 4, 4, 32, 098; CHECK-NEXT: subc 4, 3, 499; CHECK-NEXT: subfe 3, 3, 3100; CHECK-NEXT: neg 3, 3101; CHECK-NEXT: blr102entry:103 %0 = add i64 %a, -2147483648104 %cmp = icmp ult i64 %0, -4294967296105 ret i1 %cmp106}107 108define zeroext i1 @test6(i64 %a) {109; CHECK-LABEL: test6:110; CHECK: # %bb.0: # %entry111; CHECK-NEXT: addi 3, 3, -32768112; CHECK-NEXT: lis 4, -1113; CHECK-NEXT: subc 4, 3, 4114; CHECK-NEXT: subfe 3, 3, 3115; CHECK-NEXT: neg 3, 3116; CHECK-NEXT: blr117entry:118 %0 = add i64 %a, -32768119 %cmp = icmp ult i64 %0, -65536120 ret i1 %cmp121}122 123define zeroext i1 @test7(i64 %a) {124; CHECK-LABEL: test7:125; CHECK: # %bb.0: # %entry126; CHECK-NEXT: addi 3, 3, -128127; CHECK-NEXT: li 4, -256128; CHECK-NEXT: subc 4, 3, 4129; CHECK-NEXT: subfe 3, 3, 3130; CHECK-NEXT: neg 3, 3131; CHECK-NEXT: blr132entry:133 %0 = add i64 %a, -128134 %cmp = icmp ult i64 %0, -256135 ret i1 %cmp136}137 138define zeroext i1 @test8(i32 %a) {139; CHECK-LABEL: test8:140; CHECK: # %bb.0: # %entry141; CHECK-NEXT: addi 3, 3, -32768142; CHECK-NEXT: lis 4, -1143; CHECK-NEXT: rlwinm 3, 3, 16, 16, 31144; CHECK-NEXT: ori 4, 4, 1145; CHECK-NEXT: add 3, 3, 4146; CHECK-NEXT: rldicl 3, 3, 1, 63147; CHECK-NEXT: blr148entry:149 %0 = add i32 %a, -32768150 %cmp = icmp ult i32 %0, -65536151 ret i1 %cmp152}153 154define zeroext i1 @test9(i32 %a) {155; CHECK-LABEL: test9:156; CHECK: # %bb.0: # %entry157; CHECK-NEXT: lis 4, -256158; CHECK-NEXT: addi 3, 3, -128159; CHECK-NEXT: ori 4, 4, 1160; CHECK-NEXT: clrldi 3, 3, 32161; CHECK-NEXT: rldic 4, 4, 8, 0162; CHECK-NEXT: add 3, 3, 4163; CHECK-NEXT: rldicl 3, 3, 1, 63164; CHECK-NEXT: blr165entry:166 %0 = add i32 %a, -128167 %cmp = icmp ult i32 %0, -256168 ret i1 %cmp169}170 171define zeroext i1 @test10(i16 %a) {172; CHECK-LABEL: test10:173; CHECK: # %bb.0: # %entry174; CHECK-NEXT: addi 3, 3, -128175; CHECK-NEXT: lis 4, -1176; CHECK-NEXT: clrlwi 3, 3, 16177; CHECK-NEXT: ori 4, 4, 256178; CHECK-NEXT: add 3, 3, 4179; CHECK-NEXT: rldicl 3, 3, 1, 63180; CHECK-NEXT: blr181entry:182 %0 = add i16 %a, -128183 %cmp = icmp ult i16 %0, -256184 ret i1 %cmp185}186 187!1 = !{!2, !2, i64 0}188!2 = !{!"int", !3, i64 0}189!3 = !{!"omnipotent char", !4, i64 0}190!4 = !{!"Simple C++ TBAA"}191