brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 7117a5d Raw
246 lines · plain
1; RUN: opt -S -passes=loop-vectorize < %s | FileCheck %s2 3target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"4 5@a = global ptr null, align 86@b = global ptr null, align 87@c = global ptr null, align 88 9; Don't create an exponetial IR for the edge masks needed when if-converting10; this code.11 12; PR1647213 14; CHECK-NOT: %6000000 =15 16define void @_Z3fn4i(i32 %p1) {17entry:18  %cmp88 = icmp sgt i32 %p1, 019  br i1 %cmp88, label %for.body.lr.ph, label %for.end20 21for.body.lr.ph:22  %0 = load ptr, ptr @b, align 823  %1 = load ptr, ptr @a, align 824  %2 = load ptr, ptr @c, align 825  br label %for.body26 27for.body:28  %indvars.iv = phi i64 [ 0, %for.body.lr.ph ], [ %indvars.iv.next, %_ZL3fn3ii.exit58 ]29  %arrayidx = getelementptr inbounds i32, ptr %0, i64 %indvars.iv30  %3 = load i32, ptr %arrayidx, align 4  %4 = trunc i64 %indvars.iv to i3231  %and.i = and i32 %4, 132  %tobool.i.i = icmp eq i32 %and.i, 033  br i1 %tobool.i.i, label %if.end.i, label %if.then.i34 35if.then.i:36  %and.i.i = lshr i32 %3, 237  %and.lobit.i.i = and i32 %and.i.i, 138  %5 = xor i32 %and.lobit.i.i, 139  %or.i.i = or i32 %5, %340  %cmp.i = icmp sgt i32 %or.i.i, 041  %conv.i = zext i1 %cmp.i to i3242  br label %if.end.i43 44if.end.i:45  %tobool.i87 = phi i1 [ true, %if.then.i ], [ false, %for.body ]46  %p1.addr.0.i = phi i32 [ %conv.i, %if.then.i ], [ %3, %for.body ]47  %6 = trunc i64 %indvars.iv to i3248  %and1.i = and i32 %6, 749  %tobool2.i = icmp eq i32 %and1.i, 050  br i1 %tobool2.i, label %if.end7.i, label %if.then3.i51 52if.then3.i:53  %p1.addr.0.lobit.i = lshr i32 %p1.addr.0.i, 3154  %and6.i = and i32 %p1.addr.0.i, 155  %or.i = or i32 %p1.addr.0.lobit.i, %and6.i56  br label %if.end7.i57 58if.end7.i:59  %p1.addr.1.i = phi i32 [ %or.i, %if.then3.i ], [ %p1.addr.0.i, %if.end.i ]60  br i1 %tobool.i87, label %if.then10.i, label %if.end13.i61 62if.then10.i:63  %cmp11.i = icmp sgt i32 %p1.addr.1.i, 064  %conv12.i = zext i1 %cmp11.i to i3265  br label %if.end13.i66 67if.end13.i:68  %p1.addr.2.i = phi i32 [ %conv12.i, %if.then10.i ], [ %p1.addr.1.i, %if.end7.i ]69  br i1 %tobool.i.i, label %_Z3fn2iii.exit, label %if.then16.i70 71if.then16.i:72  %and17.i = lshr i32 %p1.addr.2.i, 373  %and17.lobit.i = and i32 %and17.i, 174  br label %_Z3fn2iii.exit75 76_Z3fn2iii.exit:77  %p1.addr.3.i = phi i32 [ %and17.lobit.i, %if.then16.i ], [ %p1.addr.2.i, %if.end13.i ]78  %7 = trunc i64 %indvars.iv to i3279  %shr.i = ashr i32 %7, 180  %and.i18.i = and i32 %shr.i, 181  %tobool.i19.i = icmp ne i32 %and.i18.i, 082  br i1 %tobool.i19.i, label %if.then.i20.i, label %if.end.i.i83 84if.then.i20.i:85  %cmp.i.i = icmp sgt i32 %p1.addr.3.i, 086  %conv.i.i = zext i1 %cmp.i.i to i3287  br label %if.end.i.i88 89if.end.i.i:90  %p1.addr.0.i21.i = phi i32 [ %conv.i.i, %if.then.i20.i ], [ %p1.addr.3.i, %_Z3fn2iii.exit ]91  %and1.i.i = and i32 %shr.i, 792  %tobool2.i.i = icmp eq i32 %and1.i.i, 093  br i1 %tobool2.i.i, label %if.end7.i.i, label %if.then3.i.i94 95if.then3.i.i:96  %p1.addr.0.lobit.i.i = lshr i32 %p1.addr.0.i21.i, 3197  %and6.i.i = and i32 %p1.addr.0.i21.i, 198  %or.i22.i = or i32 %p1.addr.0.lobit.i.i, %and6.i.i99  br label %if.end7.i.i100 101if.end7.i.i:102  %p1.addr.1.i.i = phi i32 [ %or.i22.i, %if.then3.i.i ], [ %p1.addr.0.i21.i, %if.end.i.i ]103  br i1 %tobool.i19.i, label %if.then10.i.i, label %if.end13.i.i104 105if.then10.i.i:106  %cmp11.i.i = icmp sgt i32 %p1.addr.1.i.i, 0107  %conv12.i.i = zext i1 %cmp11.i.i to i32108  br label %if.end13.i.i109 110if.end13.i.i:111  %p1.addr.2.i.i = phi i32 [ %conv12.i.i, %if.then10.i.i ], [ %p1.addr.1.i.i, %if.end7.i.i ]112  %and14.i.i = and i32 %shr.i, 5113  %tobool15.i.i = icmp eq i32 %and14.i.i, 0114  br i1 %tobool15.i.i, label %_Z3fn2iii.exit.i, label %if.then16.i.i115 116if.then16.i.i:117  %and17.i.i = lshr i32 %p1.addr.2.i.i, 3118  %and17.lobit.i.i = and i32 %and17.i.i, 1119  br label %_Z3fn2iii.exit.i120 121_Z3fn2iii.exit.i:122  %p1.addr.3.i.i = phi i32 [ %and17.lobit.i.i, %if.then16.i.i ], [ %p1.addr.2.i.i, %if.end13.i.i ]123  %8 = trunc i64 %indvars.iv to i32124  %tobool.i11.i = icmp eq i32 %8, 0125  br i1 %tobool.i11.i, label %_ZL3fn3ii.exit, label %if.then.i15.i126 127if.then.i15.i:128  %and.i12.i = lshr i32 %p1.addr.3.i.i, 2129  %and.lobit.i13.i = and i32 %and.i12.i, 1130  %9 = xor i32 %and.lobit.i13.i, 1131  %or.i14.i = or i32 %9, %p1.addr.3.i.i132  br label %_ZL3fn3ii.exit133 134_ZL3fn3ii.exit:135  %p1.addr.0.i16.i = phi i32 [ %or.i14.i, %if.then.i15.i ], [ %p1.addr.3.i.i, %_Z3fn2iii.exit.i ]136  %arrayidx2 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv137  store i32 %p1.addr.0.i16.i, ptr %arrayidx2, align 4  %arrayidx4 = getelementptr inbounds i32, ptr %0, i64 %indvars.iv138  %10 = load i32, ptr %arrayidx4, align 4  br i1 %tobool.i.i, label %_Z3fn1ii.exit.i26, label %if.then.i.i21139 140if.then.i.i21:141  %and.i.i18 = lshr i32 %10, 2142  %and.lobit.i.i19 = and i32 %and.i.i18, 1143  %11 = xor i32 %and.lobit.i.i19, 1144  %or.i.i20 = or i32 %11, %10145  br label %_Z3fn1ii.exit.i26146 147_Z3fn1ii.exit.i26:148  %p1.addr.0.i.i22 = phi i32 [ %or.i.i20, %if.then.i.i21 ], [ %10, %_ZL3fn3ii.exit ]149  br i1 %tobool.i87, label %if.then.i63, label %if.end.i67150 151if.then.i63:152  %cmp.i61 = icmp sgt i32 %p1.addr.0.i.i22, 0153  %conv.i62 = zext i1 %cmp.i61 to i32154  br label %if.end.i67155 156if.end.i67:157  %p1.addr.0.i64 = phi i32 [ %conv.i62, %if.then.i63 ], [ %p1.addr.0.i.i22, %_Z3fn1ii.exit.i26 ]158  br i1 %tobool2.i, label %if.end7.i73, label %if.then3.i71159 160if.then3.i71:161  %p1.addr.0.lobit.i68 = lshr i32 %p1.addr.0.i64, 31162  %and6.i69 = and i32 %p1.addr.0.i64, 1163  %or.i70 = or i32 %p1.addr.0.lobit.i68, %and6.i69164  br label %if.end7.i73165 166if.end7.i73:167  %p1.addr.1.i72 = phi i32 [ %or.i70, %if.then3.i71 ], [ %p1.addr.0.i64, %if.end.i67 ]168  br i1 %tobool.i87, label %if.then10.i76, label %if.end13.i80169 170if.then10.i76:171  %cmp11.i74 = icmp sgt i32 %p1.addr.1.i72, 0172  %conv12.i75 = zext i1 %cmp11.i74 to i32173  br label %if.end13.i80174 175if.end13.i80:176  %p1.addr.2.i77 = phi i32 [ %conv12.i75, %if.then10.i76 ], [ %p1.addr.1.i72, %if.end7.i73 ]177  br i1 %tobool.i.i, label %_Z3fn2iii.exit85, label %if.then16.i83178 179if.then16.i83:180  %and17.i81 = lshr i32 %p1.addr.2.i77, 3181  %and17.lobit.i82 = and i32 %and17.i81, 1182  br label %_Z3fn2iii.exit85183 184_Z3fn2iii.exit85:185  %p1.addr.3.i84 = phi i32 [ %and17.lobit.i82, %if.then16.i83 ], [ %p1.addr.2.i77, %if.end13.i80 ]186  br i1 %tobool.i19.i, label %if.then.i20.i29, label %if.end.i.i33187 188if.then.i20.i29:189  %cmp.i.i27 = icmp sgt i32 %p1.addr.3.i84, 0190  %conv.i.i28 = zext i1 %cmp.i.i27 to i32191  br label %if.end.i.i33192 193if.end.i.i33:194  %p1.addr.0.i21.i30 = phi i32 [ %conv.i.i28, %if.then.i20.i29 ], [ %p1.addr.3.i84, %_Z3fn2iii.exit85 ]195  br i1 %tobool2.i.i, label %if.end7.i.i39, label %if.then3.i.i37196 197if.then3.i.i37:198  %p1.addr.0.lobit.i.i34 = lshr i32 %p1.addr.0.i21.i30, 31199  %and6.i.i35 = and i32 %p1.addr.0.i21.i30, 1200  %or.i22.i36 = or i32 %p1.addr.0.lobit.i.i34, %and6.i.i35201  br label %if.end7.i.i39202 203if.end7.i.i39:204  %p1.addr.1.i.i38 = phi i32 [ %or.i22.i36, %if.then3.i.i37 ], [ %p1.addr.0.i21.i30, %if.end.i.i33 ]205  br i1 %tobool.i19.i, label %if.then10.i.i42, label %if.end13.i.i46206 207if.then10.i.i42:208  %cmp11.i.i40 = icmp sgt i32 %p1.addr.1.i.i38, 0209  %conv12.i.i41 = zext i1 %cmp11.i.i40 to i32210  br label %if.end13.i.i46211 212if.end13.i.i46:213  %p1.addr.2.i.i43 = phi i32 [ %conv12.i.i41, %if.then10.i.i42 ], [ %p1.addr.1.i.i38, %if.end7.i.i39 ]214  br i1 %tobool15.i.i, label %_Z3fn2iii.exit.i52, label %if.then16.i.i49215 216if.then16.i.i49:217  %and17.i.i47 = lshr i32 %p1.addr.2.i.i43, 3218  %and17.lobit.i.i48 = and i32 %and17.i.i47, 1219  br label %_Z3fn2iii.exit.i52220 221_Z3fn2iii.exit.i52:222  %p1.addr.3.i.i50 = phi i32 [ %and17.lobit.i.i48, %if.then16.i.i49 ], [ %p1.addr.2.i.i43, %if.end13.i.i46 ]223  br i1 %tobool.i11.i, label %_ZL3fn3ii.exit58, label %if.then.i15.i56224 225if.then.i15.i56:226  %and.i12.i53 = lshr i32 %p1.addr.3.i.i50, 2227  %and.lobit.i13.i54 = and i32 %and.i12.i53, 1228  %12 = xor i32 %and.lobit.i13.i54, 1229  %or.i14.i55 = or i32 %12, %p1.addr.3.i.i50230  br label %_ZL3fn3ii.exit58231 232_ZL3fn3ii.exit58:233  %p1.addr.0.i16.i57 = phi i32 [ %or.i14.i55, %if.then.i15.i56 ], [ %p1.addr.3.i.i50, %_Z3fn2iii.exit.i52 ]234  %arrayidx7 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv235  store i32 %p1.addr.0.i16.i57, ptr %arrayidx7, align 4  %indvars.iv.next = add i64 %indvars.iv, 1236  %lftr.wideiv = trunc i64 %indvars.iv.next to i32237  %exitcond = icmp ne i32 %lftr.wideiv, %p1238  br i1 %exitcond, label %for.body, label %for.cond.for.end_crit_edge239 240for.cond.for.end_crit_edge:241  br label %for.end242 243for.end:244  ret void245}246