skia /
skia /
525fd36dd3195281bcbc2e371fa87037a7cb1002 little steps forward
- impl splat, store32, which lets us handle the conceptually simplest
program, a 32-bit memset.
- dump bitcode to /tmp on success
Kind of starting to look good!
$ ninja -C out dm && out/dm -m SkVM_Pointless
$ opt --O1 /tmp/skvm-jit-211960346.bc | llvm-dis
; Function Attrs: nofree norecurse nounwind writeonly
define void @skvm-jit-211960346(i64, i8* nocapture) local_unnamed_addr #0 {
enter:
%2 = icmp ugt i64 %0, 7
br i1 %2, label %loopK, label %test1.preheader
test1.preheader: ; preds = %loopK, %enter
%.07.lcssa = phi i64 [ %0, %enter ], [ %5, %loopK ]
%.0.lcssa = phi i8* [ %1, %enter ], [ %6, %loopK ]
%3 = icmp eq i64 %.07.lcssa, 0
br i1 %3, label %leave, label %loop1
loopK: ; preds = %enter, %loopK
%.012 = phi i8* [ %6, %loopK ], [ %1, %enter ]
%.0711 = phi i64 [ %5, %loopK ], [ %0, %enter ]
%4 = bitcast i8* %.012 to <8 x i32>*
store <8 x i32> <i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42, i32 42>, <8 x i32>* %4, align 1
%5 = add i64 %.0711, -8
%6 = getelementptr i8, i8* %.012, i64 32
%7 = icmp ugt i64 %5, 7
br i1 %7, label %loopK, label %test1.preheader
loop1: ; preds = %test1.preheader, %loop1
%.110 = phi i8* [ %10, %loop1 ], [ %.0.lcssa, %test1.preheader ]
%.189 = phi i64 [ %9, %loop1 ], [ %.07.lcssa, %test1.preheader ]
%8 = bitcast i8* %.110 to i32*
store i32 42, i32* %8, align 1
%9 = add i64 %.189, -1
%10 = getelementptr i8, i8* %.110, i64 4
%11 = icmp eq i64 %9, 0
br i1 %11, label %leave, label %loop1
leave: ; preds = %loop1, %test1.preheader
ret void
}
attributes #0 = { nofree norecurse nounwind writeonly }
Change-Id: I00953c1113739a9ee094cb6cb3c99f1b7f8de9bf
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/273509
Reviewed-by: Herb Derby <herb@google.com>
1 file changed