brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 228cc94 Raw
173 lines · plain
1; RUN: opt < %s -passes=loop-vectorize -force-vector-width=2 -S | FileCheck %s2 3%s1 = type { [32000 x double], [32000 x double], [32000 x double] }4 5define i32 @load_with_pointer_phi_no_runtime_checks(ptr %data) {6; CHECK-LABEL: @load_with_pointer_phi_no_runtime_checks7; CHECK-NOT: memcheck8; CHECK:     vector.body:9;10entry:11  br label %loop.header12 13loop.header:                                        ; preds = %loop.latch, %entry14  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]15  %iv.next = add nuw nsw i64 %iv, 116  %cmp5 = icmp ult i64 %iv, 1599917  %arrayidx = getelementptr inbounds %s1, ptr %data, i64 0, i32 0, i64 %iv18  br i1 %cmp5, label %if.then, label %if.else19 20if.then:                                          ; preds = %loop.header21  %gep.1 = getelementptr inbounds %s1, ptr %data, i64 0, i32 1, i64 %iv22  br label %loop.latch23 24if.else:                                          ; preds = %loop.header25  %gep.2 = getelementptr inbounds %s1, ptr %data, i64 0, i32 2, i64 %iv26  br label %loop.latch27 28loop.latch:                                          ; preds = %if.else, %if.then29  %gep.2.sink = phi ptr [ %gep.2, %if.else ], [ %gep.1, %if.then ]30  %v8 = load double, ptr %gep.2.sink, align 831  %mul16 = fmul double 3.0, %v832  store double %mul16, ptr %arrayidx, align 833  %exitcond.not = icmp eq i64 %iv.next, 3200034  br i1 %exitcond.not, label %exit, label %loop.header35 36exit:                                             ; preds = %loop.latch37  ret i32 1038}39 40define i32 @store_with_pointer_phi_no_runtime_checks(ptr %data) {41; CHECK-LABEL: @store_with_pointer_phi_no_runtime_checks42; CHECK-NOT: memcheck43; CHECK:     vector.body44;45entry:46  br label %loop.header47 48loop.header:                                        ; preds = %loop.latch, %entry49  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]50  %iv.next = add nuw nsw i64 %iv, 151  %cmp5 = icmp ult i64 %iv, 1599952  %arrayidx = getelementptr inbounds %s1, ptr %data, i64 0, i32 0, i64 %iv53  br i1 %cmp5, label %if.then, label %if.else54 55if.then:                                          ; preds = %loop.header56  %gep.1 = getelementptr inbounds %s1, ptr %data, i64 0, i32 1, i64 %iv57  br label %loop.latch58 59if.else:                                          ; preds = %loop.header60  %gep.2 = getelementptr inbounds %s1, ptr %data, i64 0, i32 2, i64 %iv61  br label %loop.latch62 63loop.latch:                                          ; preds = %if.else, %if.then64  %gep.2.sink = phi ptr [ %gep.2, %if.else ], [ %gep.1, %if.then ]65  %v8 = load double, ptr %arrayidx, align 866  %mul16 = fmul double 3.0, %v867  store double %mul16, ptr %gep.2.sink, align 868  %exitcond.not = icmp eq i64 %iv.next, 3200069  br i1 %exitcond.not, label %exit, label %loop.header70 71exit:                                             ; preds = %loop.latch72  ret i32 1073}74 75define i32 @store_with_pointer_phi_runtime_checks(ptr %A, ptr %B, ptr %C) {76; CHECK-LABEL: @store_with_pointer_phi_runtime_checks77; CHECK:     memcheck78; CHECK:     vector.body79;80entry:81  br label %loop.header82 83loop.header:                                        ; preds = %loop.latch, %entry84  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]85  %iv.next = add nuw nsw i64 %iv, 186  %cmp5 = icmp ult i64 %iv, 1599987  %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv88  br i1 %cmp5, label %if.then, label %if.else89 90if.then:                                          ; preds = %loop.header91  %gep.1 = getelementptr inbounds double, ptr %B, i64 %iv92  br label %loop.latch93 94if.else:                                          ; preds = %loop.header95  %gep.2 = getelementptr inbounds double, ptr %C, i64 %iv96  br label %loop.latch97 98loop.latch:                                          ; preds = %if.else, %if.then99  %gep.2.sink = phi ptr [ %gep.2, %if.else ], [ %gep.1, %if.then ]100  %v8 = load double, ptr %arrayidx, align 8101  %mul16 = fmul double 3.0, %v8102  store double %mul16, ptr %gep.2.sink, align 8103  %exitcond.not = icmp eq i64 %iv.next, 32000104  br i1 %exitcond.not, label %exit, label %loop.header105 106exit:                                             ; preds = %loop.latch107  ret i32 10108}109 110define i32 @load_with_pointer_phi_outside_loop(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {111; CHECK-LABEL: @load_with_pointer_phi_outside_loop112; CHECK-NOT: vector.body113;114entry:115  br i1 %c.0, label %if.then, label %if.else116 117if.then:118  br label %loop.ph119 120if.else:121  %ptr.select = select i1 %c.1, ptr %C, ptr %B122  br label %loop.ph123 124loop.ph:125  %ptr = phi ptr [ %A, %if.then ], [ %ptr.select, %if.else ]126  br label %loop.header127 128loop.header:                                        ; preds = %loop.latch, %entry129  %iv = phi i64 [ 0, %loop.ph ], [ %iv.next, %loop.header ]130  %iv.next = add nuw nsw i64 %iv, 1131  %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv132  %v8 = load double, ptr %ptr, align 8133  %mul16 = fmul double 3.0, %v8134  store double %mul16, ptr %arrayidx, align 8135  %exitcond.not = icmp eq i64 %iv.next, 32000136  br i1 %exitcond.not, label %exit, label %loop.header137 138exit:                                             ; preds = %loop.latch139  ret i32 10140}141 142define i32 @store_with_pointer_phi_outside_loop(ptr %A, ptr %B, ptr %C, i1 %c.0, i1 %c.1) {143; CHECK-LABEL: @store_with_pointer_phi_outside_loop144; CHECK-NOT: vector.body145;146entry:147  br i1 %c.0, label %if.then, label %if.else148 149if.then:150  br label %loop.ph151 152if.else:153  %ptr.select = select i1 %c.1, ptr %C, ptr %B154  br label %loop.ph155 156loop.ph:157  %ptr = phi ptr [ %A, %if.then ], [ %ptr.select, %if.else ]158  br label %loop.header159 160loop.header:                                        ; preds = %loop.latch, %entry161  %iv = phi i64 [ 0, %loop.ph ], [ %iv.next, %loop.header ]162  %iv.next = add nuw nsw i64 %iv, 1163  %arrayidx = getelementptr inbounds double, ptr %A, i64 %iv164  %v8 = load double, ptr %arrayidx, align 8165  %mul16 = fmul double 3.0, %v8166  store double %mul16, ptr %ptr, align 8167  %exitcond.not = icmp eq i64 %iv.next, 32000168  br i1 %exitcond.not, label %exit, label %loop.header169 170exit:                                             ; preds = %loop.latch171  ret i32 10172}173