brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.7 KiB · a4f5e52 Raw
394 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --implicit-check-not '{{and|movz|sar|shl}}'3 4; Optimize away zext-inreg and sext-inreg on the loop induction5; variable using trip-count information.6 7define void @count_up(ptr %d, i64 %n) nounwind {8; CHECK-LABEL: count_up:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    movq $-80, %rax11; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]12; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]13; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]14; CHECK-NEXT:    .p2align 415; CHECK-NEXT:  .LBB0_1: # %loop16; CHECK-NEXT:    # =>This Inner Loop Header: Depth=117; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero18; CHECK-NEXT:    mulsd %xmm0, %xmm319; CHECK-NEXT:    mulsd %xmm1, %xmm320; CHECK-NEXT:    mulsd %xmm2, %xmm321; CHECK-NEXT:    movsd %xmm3, 80(%rdi,%rax)22; CHECK-NEXT:    addq $8, %rax23; CHECK-NEXT:    jne .LBB0_124; CHECK-NEXT:  # %bb.2: # %return25; CHECK-NEXT:    retq26entry:27	br label %loop28 29loop:30	%indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]31	%indvar.i8 = and i64 %indvar, 25532	%t0 = getelementptr double, ptr %d, i64 %indvar.i833	%t1 = load double, ptr %t034	%t2 = fmul double %t1, 0.135	store double %t2, ptr %t036	%indvar.i24 = and i64 %indvar, 1677721537	%t3 = getelementptr double, ptr %d, i64 %indvar.i2438	%t4 = load double, ptr %t339	%t5 = fmul double %t4, 2.340	store double %t5, ptr %t341	%t6 = getelementptr double, ptr %d, i64 %indvar42	%t7 = load double, ptr %t643	%t8 = fmul double %t7, 4.544	store double %t8, ptr %t645	%indvar.next = add i64 %indvar, 146	%exitcond = icmp eq i64 %indvar.next, 1047	br i1 %exitcond, label %return, label %loop48 49return:50	ret void51}52 53define void @count_down(ptr %d, i64 %n) nounwind {54; CHECK-LABEL: count_down:55; CHECK:       # %bb.0: # %entry56; CHECK-NEXT:    movl $80, %eax57; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]58; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]59; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]60; CHECK-NEXT:    .p2align 461; CHECK-NEXT:  .LBB1_1: # %loop62; CHECK-NEXT:    # =>This Inner Loop Header: Depth=163; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero64; CHECK-NEXT:    mulsd %xmm0, %xmm365; CHECK-NEXT:    mulsd %xmm1, %xmm366; CHECK-NEXT:    mulsd %xmm2, %xmm367; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax)68; CHECK-NEXT:    addq $-8, %rax69; CHECK-NEXT:    jne .LBB1_170; CHECK-NEXT:  # %bb.2: # %return71; CHECK-NEXT:    retq72entry:73	br label %loop74 75loop:76	%indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]77	%indvar.i8 = and i64 %indvar, 25578	%t0 = getelementptr double, ptr %d, i64 %indvar.i879	%t1 = load double, ptr %t080	%t2 = fmul double %t1, 0.181	store double %t2, ptr %t082	%indvar.i24 = and i64 %indvar, 1677721583	%t3 = getelementptr double, ptr %d, i64 %indvar.i2484	%t4 = load double, ptr %t385	%t5 = fmul double %t4, 2.386	store double %t5, ptr %t387	%t6 = getelementptr double, ptr %d, i64 %indvar88	%t7 = load double, ptr %t689	%t8 = fmul double %t7, 4.590	store double %t8, ptr %t691	%indvar.next = sub i64 %indvar, 192	%exitcond = icmp eq i64 %indvar.next, 093	br i1 %exitcond, label %return, label %loop94 95return:96	ret void97}98 99define void @count_up_signed(ptr %d, i64 %n) nounwind {100; CHECK-LABEL: count_up_signed:101; CHECK:       # %bb.0: # %entry102; CHECK-NEXT:    movq $-80, %rax103; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]104; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]105; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]106; CHECK-NEXT:    .p2align 4107; CHECK-NEXT:  .LBB2_1: # %loop108; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1109; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero110; CHECK-NEXT:    mulsd %xmm0, %xmm3111; CHECK-NEXT:    mulsd %xmm1, %xmm3112; CHECK-NEXT:    mulsd %xmm2, %xmm3113; CHECK-NEXT:    movsd %xmm3, 80(%rdi,%rax)114; CHECK-NEXT:    addq $8, %rax115; CHECK-NEXT:    jne .LBB2_1116; CHECK-NEXT:  # %bb.2: # %return117; CHECK-NEXT:    retq118entry:119	br label %loop120 121loop:122	%indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]123        %s0 = shl i64 %indvar, 8124	%indvar.i8 = ashr i64 %s0, 8125	%t0 = getelementptr double, ptr %d, i64 %indvar.i8126	%t1 = load double, ptr %t0127	%t2 = fmul double %t1, 0.1128	store double %t2, ptr %t0129	%s1 = shl i64 %indvar, 24130	%indvar.i24 = ashr i64 %s1, 24131	%t3 = getelementptr double, ptr %d, i64 %indvar.i24132	%t4 = load double, ptr %t3133	%t5 = fmul double %t4, 2.3134	store double %t5, ptr %t3135	%t6 = getelementptr double, ptr %d, i64 %indvar136	%t7 = load double, ptr %t6137	%t8 = fmul double %t7, 4.5138	store double %t8, ptr %t6139	%indvar.next = add i64 %indvar, 1140	%exitcond = icmp eq i64 %indvar.next, 10141	br i1 %exitcond, label %return, label %loop142 143return:144	ret void145}146 147define void @count_down_signed(ptr %d, i64 %n) nounwind {148; CHECK-LABEL: count_down_signed:149; CHECK:       # %bb.0: # %entry150; CHECK-NEXT:    movl $80, %eax151; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]152; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]153; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]154; CHECK-NEXT:    .p2align 4155; CHECK-NEXT:  .LBB3_1: # %loop156; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1157; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero158; CHECK-NEXT:    mulsd %xmm0, %xmm3159; CHECK-NEXT:    mulsd %xmm1, %xmm3160; CHECK-NEXT:    mulsd %xmm2, %xmm3161; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax)162; CHECK-NEXT:    addq $-8, %rax163; CHECK-NEXT:    jne .LBB3_1164; CHECK-NEXT:  # %bb.2: # %return165; CHECK-NEXT:    retq166entry:167	br label %loop168 169loop:170	%indvar = phi i64 [ 10, %entry ], [ %indvar.next, %loop ]171        %s0 = shl i64 %indvar, 8172	%indvar.i8 = ashr i64 %s0, 8173	%t0 = getelementptr double, ptr %d, i64 %indvar.i8174	%t1 = load double, ptr %t0175	%t2 = fmul double %t1, 0.1176	store double %t2, ptr %t0177	%s1 = shl i64 %indvar, 24178	%indvar.i24 = ashr i64 %s1, 24179	%t3 = getelementptr double, ptr %d, i64 %indvar.i24180	%t4 = load double, ptr %t3181	%t5 = fmul double %t4, 2.3182	store double %t5, ptr %t3183	%t6 = getelementptr double, ptr %d, i64 %indvar184	%t7 = load double, ptr %t6185	%t8 = fmul double %t7, 4.5186	store double %t8, ptr %t6187	%indvar.next = sub i64 %indvar, 1188	%exitcond = icmp eq i64 %indvar.next, 0189	br i1 %exitcond, label %return, label %loop190 191return:192	ret void193}194 195define void @another_count_up(ptr %d, i64 %n) nounwind {196; CHECK-LABEL: another_count_up:197; CHECK:       # %bb.0: # %entry198; CHECK-NEXT:    movq $-8, %rax199; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]200; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]201; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]202; CHECK-NEXT:    .p2align 4203; CHECK-NEXT:  .LBB4_1: # %loop204; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1205; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero206; CHECK-NEXT:    mulsd %xmm0, %xmm3207; CHECK-NEXT:    movsd %xmm3, 2048(%rdi,%rax)208; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero209; CHECK-NEXT:    mulsd %xmm1, %xmm3210; CHECK-NEXT:    movsd %xmm3, 134217728(%rdi,%rax)211; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero212; CHECK-NEXT:    mulsd %xmm2, %xmm3213; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax)214; CHECK-NEXT:    addq $8, %rax215; CHECK-NEXT:    jne .LBB4_1216; CHECK-NEXT:  # %bb.2: # %return217; CHECK-NEXT:    retq218entry:219	br label %loop220 221loop:222	%indvar = phi i64 [ 18446744073709551615, %entry ], [ %indvar.next, %loop ]223	%indvar.i8 = and i64 %indvar, 255224	%t0 = getelementptr double, ptr %d, i64 %indvar.i8225	%t1 = load double, ptr %t0226	%t2 = fmul double %t1, 0.1227	store double %t2, ptr %t0228	%indvar.i24 = and i64 %indvar, 16777215229	%t3 = getelementptr double, ptr %d, i64 %indvar.i24230	%t4 = load double, ptr %t3231	%t5 = fmul double %t4, 2.3232	store double %t5, ptr %t3233	%t6 = getelementptr double, ptr %d, i64 %indvar234	%t7 = load double, ptr %t6235	%t8 = fmul double %t7, 4.5236	store double %t8, ptr %t6237	%indvar.next = add i64 %indvar, 1238	%exitcond = icmp eq i64 %indvar.next, 0239	br i1 %exitcond, label %return, label %loop240 241return:242	ret void243}244 245define void @another_count_down(ptr %d, i64 %n) nounwind {246; CHECK-LABEL: another_count_down:247; CHECK:       # %bb.0: # %entry248; CHECK-NEXT:    movq $-2040, %rax # imm = 0xF808249; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]250; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]251; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]252; CHECK-NEXT:    movq %rdi, %rcx253; CHECK-NEXT:    movq %rdi, %rdx254; CHECK-NEXT:    .p2align 4255; CHECK-NEXT:  .LBB5_1: # %loop256; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1257; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero258; CHECK-NEXT:    mulsd %xmm0, %xmm3259; CHECK-NEXT:    movsd %xmm3, 2040(%rdi,%rax)260; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero261; CHECK-NEXT:    divsd %xmm1, %xmm3262; CHECK-NEXT:    movsd %xmm3, (%rcx)263; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero264; CHECK-NEXT:    mulsd %xmm2, %xmm3265; CHECK-NEXT:    movsd %xmm3, (%rdx)266; CHECK-NEXT:    addq $-8, %rdx267; CHECK-NEXT:    addq $134217720, %rcx # imm = 0x7FFFFF8268; CHECK-NEXT:    addq $2040, %rax # imm = 0x7F8269; CHECK-NEXT:    jne .LBB5_1270; CHECK-NEXT:  # %bb.2: # %return271; CHECK-NEXT:    retq272entry:273	br label %loop274 275loop:276	%indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]277	%indvar.i8 = and i64 %indvar, 255278	%t0 = getelementptr double, ptr %d, i64 %indvar.i8279	%t1 = load double, ptr %t0280	%t2 = fmul double %t1, 0.1281	store double %t2, ptr %t0282	%indvar.i24 = and i64 %indvar, 16777215283	%t3 = getelementptr double, ptr %d, i64 %indvar.i24284	%t4 = load double, ptr %t3285	%t5 = fdiv double %t4, 2.3286	store double %t5, ptr %t3287	%t6 = getelementptr double, ptr %d, i64 %indvar288	%t7 = load double, ptr %t6289	%t8 = fmul double %t7, 4.5290	store double %t8, ptr %t6291	%indvar.next = sub i64 %indvar, 1292	%exitcond = icmp eq i64 %indvar.next, 18446744073709551615293	br i1 %exitcond, label %return, label %loop294 295return:296	ret void297}298 299define void @another_count_up_signed(ptr %d, i64 %n) nounwind {300; CHECK-LABEL: another_count_up_signed:301; CHECK:       # %bb.0: # %entry302; CHECK-NEXT:    movq $-8, %rax303; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]304; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]305; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]306; CHECK-NEXT:    .p2align 4307; CHECK-NEXT:  .LBB6_1: # %loop308; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1309; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero310; CHECK-NEXT:    mulsd %xmm0, %xmm3311; CHECK-NEXT:    divsd %xmm1, %xmm3312; CHECK-NEXT:    mulsd %xmm2, %xmm3313; CHECK-NEXT:    movsd %xmm3, (%rdi,%rax)314; CHECK-NEXT:    addq $8, %rax315; CHECK-NEXT:    jne .LBB6_1316; CHECK-NEXT:  # %bb.2: # %return317; CHECK-NEXT:    retq318entry:319	br label %loop320 321loop:322	%indvar = phi i64 [ 18446744073709551615, %entry ], [ %indvar.next, %loop ]323        %s0 = shl i64 %indvar, 8324	%indvar.i8 = ashr i64 %s0, 8325	%t0 = getelementptr double, ptr %d, i64 %indvar.i8326	%t1 = load double, ptr %t0327	%t2 = fmul double %t1, 0.1328	store double %t2, ptr %t0329	%s1 = shl i64 %indvar, 24330	%indvar.i24 = ashr i64 %s1, 24331	%t3 = getelementptr double, ptr %d, i64 %indvar.i24332	%t4 = load double, ptr %t3333	%t5 = fdiv double %t4, 2.3334	store double %t5, ptr %t3335	%t6 = getelementptr double, ptr %d, i64 %indvar336	%t7 = load double, ptr %t6337	%t8 = fmul double %t7, 4.5338	store double %t8, ptr %t6339	%indvar.next = add i64 %indvar, 1340	%exitcond = icmp eq i64 %indvar.next, 0341	br i1 %exitcond, label %return, label %loop342 343return:344	ret void345}346 347define void @another_count_down_signed(ptr %d, i64 %n) nounwind {348; CHECK-LABEL: another_count_down_signed:349; CHECK:       # %bb.0: # %entry350; CHECK-NEXT:    movl $8, %eax351; CHECK-NEXT:    movsd {{.*#+}} xmm0 = [1.0000000000000001E-1,0.0E+0]352; CHECK-NEXT:    movsd {{.*#+}} xmm1 = [2.2999999999999998E+0,0.0E+0]353; CHECK-NEXT:    movsd {{.*#+}} xmm2 = [4.5E+0,0.0E+0]354; CHECK-NEXT:    .p2align 4355; CHECK-NEXT:  .LBB7_1: # %loop356; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1357; CHECK-NEXT:    movsd {{.*#+}} xmm3 = mem[0],zero358; CHECK-NEXT:    mulsd %xmm0, %xmm3359; CHECK-NEXT:    divsd %xmm1, %xmm3360; CHECK-NEXT:    mulsd %xmm2, %xmm3361; CHECK-NEXT:    movsd %xmm3, -8(%rdi,%rax)362; CHECK-NEXT:    addq $-8, %rax363; CHECK-NEXT:    jne .LBB7_1364; CHECK-NEXT:  # %bb.2: # %return365; CHECK-NEXT:    retq366entry:367	br label %loop368 369loop:370	%indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]371        %s0 = shl i64 %indvar, 8372	%indvar.i8 = ashr i64 %s0, 8373	%t0 = getelementptr double, ptr %d, i64 %indvar.i8374	%t1 = load double, ptr %t0375	%t2 = fmul double %t1, 0.1376	store double %t2, ptr %t0377	%s1 = shl i64 %indvar, 24378	%indvar.i24 = ashr i64 %s1, 24379	%t3 = getelementptr double, ptr %d, i64 %indvar.i24380	%t4 = load double, ptr %t3381	%t5 = fdiv double %t4, 2.3382	store double %t5, ptr %t3383	%t6 = getelementptr double, ptr %d, i64 %indvar384	%t7 = load double, ptr %t6385	%t8 = fmul double %t7, 4.5386	store double %t8, ptr %t6387	%indvar.next = sub i64 %indvar, 1388	%exitcond = icmp eq i64 %indvar.next, 18446744073709551615389	br i1 %exitcond, label %return, label %loop390 391return:392	ret void393}394