search for: mul1

Displaying 20 results from an estimated 37 matches for "mul1".

Did you mean: mul
2013 Aug 08
13
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...uble %d) { entry: %div = fdiv fast double %a, %d %div1 = fdiv fast double %b, %d %call = tail call i32 @foo(double %div, double %div1) ret void } to: define void @t1b(double %a, double %b, double %d) { entry: %div = fdiv fast double 1.000000e+00, %d %mul = fmul fast double %div, %a %mul1 = fmul fast double %div, %b %call = tail call i32 @foo(double %mul, double %mul1) ret void } Is such a transformation best done as a (target-specific) DAG combine? A similar instcombine already exists for the X/C->X*1/C case (see the CvtFDivConstToReciprocal function in InstCombineMlDivRem...
2014 Mar 12
2
[LLVMdev] Autovectorization questions
...LVM prove this? The loop vectorizer relies on scev’s nowrap flags. We need to improve SCEV for this. %conv = sext i32 %k to i64 --> (sext i32 %k to i64) %i.06 = phi i64 [ 0, %entry ], [ %inc, %for.body ] --> {0,+,1}<nuw><nsw><%for.body> Exits: 1023 %mul1 = mul nsw i64 %i.06, 7 --> {0,+,7}<%for.body> Exits: 7161 %arrayidx2 = getelementptr inbounds i32* %A, i64 %mul1 --> {%A,+,28}<%for.body> <== we want to see a nw flag here. Scev sometimes drops new flags for safety (cannonicalization can make t...
2019 Jul 23
2
[RFC] A new multidimensional array indexing intrinsic
...ss, switching the indexed base type to a non-integer for illustration purposes: > > %arrayidx = call i64 @llvm.multidim.array.index.i64.p0f64.i64.i64.i64.i64 double* %A, i64 %str_1, i64 %idx_1, i64 %str_2, i64 %idx_2 > > According to the RFC, that would get lowered to this: > > %mul1 = mul nsw i64 %str_1, %idx_1 > %mul2 = mul1 nsw i64 %str_2, %idx_2 > %total = add nsw i64 %mul2, %mul1 > %arrayidx = getelementptr inbounds double, double* %A, i64 %total, !multidim !1 > > The problem I'm having is that the source element type in the GEP instruction in the...
2013 Aug 08
3
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...call = tail call i32 @foo(double %div, double %div1) >> ret void >> } >> >> to: >> >> define void @t1b(double %a, double %b, double %d) { >> entry: >> %div = fdiv fast double 1.000000e+00, %d >> %mul = fmul fast double %div, %a >> %mul1 = fmul fast double %div, %b >> %call = tail call i32 @foo(double %mul, double %mul1) >> ret void >> } >> >> Is such a transformation best done as a (target-specific) DAG combine? >> >> A similar instcombine already exists for the X/C->X*1/C case (see...
2013 Aug 08
0
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...%div1 = fdiv fast double %b, %d > %call = tail call i32 @foo(double %div, double %div1) > ret void > } > > to: > > define void @t1b(double %a, double %b, double %d) { > entry: > %div = fdiv fast double 1.000000e+00, %d > %mul = fmul fast double %div, %a > %mul1 = fmul fast double %div, %b > %call = tail call i32 @foo(double %mul, double %mul1) > ret void > } > > Is such a transformation best done as a (target-specific) DAG combine? > > A similar instcombine already exists for the X/C->X*1/C case (see the > CvtFDivConstToRec...
2013 Aug 08
0
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...iv1 = fdiv fast double %b, %d > %call = tail call i32 @foo(double %div, double %div1) > ret void > } > > to: > > define void @t1b(double %a, double %b, double %d) { > entry: > %div = fdiv fast double 1.000000e+00, %d > %mul = fmul fast double %div, %a > %mul1 = fmul fast double %div, %b > %call = tail call i32 @foo(double %mul, double %mul1) > ret void > } > > Is such a transformation best done as a (target-specific) DAG combine? > > A similar instcombine already exists for the X/C->X*1/C case (see the CvtFDivConstToRecipro...
2013 Aug 08
0
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...iv1 = fdiv fast double %b, %d > %call = tail call i32 @foo(double %div, double %div1) > ret void > } > > to: > > define void @t1b(double %a, double %b, double %d) { > entry: > %div = fdiv fast double 1.000000e+00, %d > %mul = fmul fast double %div, %a > %mul1 = fmul fast double %div, %b > %call = tail call i32 @foo(double %mul, double %mul1) > ret void > } > > Is such a transformation best done as a (target-specific) DAG combine? > > A similar instcombine already exists for the X/C->X*1/C case (see the CvtFDivConstToRecipro...
2013 Oct 30
0
[LLVMdev] loop vectorizer
...d by 'opt': entry: %cmp9 = icmp ult i64 %start, %end br i1 %cmp9, label %for.body, label %for.end for.body: ; preds = %entry, %for.body %storemerge10 = phi i64 [ %inc, %for.body ], [ %start, %entry ] %div = lshr i64 %storemerge10, 2 %mul1 = shl i64 %div, 3 %rem = and i64 %storemerge10, 3 %add2 = or i64 %mul1, %rem %0 = lshr i64 %storemerge10, 1 %add51 = shl i64 %0, 2 %mul6 = or i64 %rem, %add51 %add8 = or i64 %mul6, 4 %arrayidx = getelementptr inbounds float* %a, i64 %add2 %1 = load float* %arrayidx, align 4...
2013 Aug 08
0
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...ble %div1) >>> ret void >>> } >>> >>> to: >>> >>> define void @t1b(double %a, double %b, double %d) { >>> entry: >>> %div = fdiv fast double 1.000000e+00, %d >>> %mul = fmul fast double %div, %a >>> %mul1 = fmul fast double %div, %b >>> %call = tail call i32 @foo(double %mul, double %mul1) >>> ret void >>> } >>> >>> Is such a transformation best done as a (target-specific) DAG combine? >>> >>> A similar instcombine already exists f...
2013 Aug 08
2
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...ll = tail call i32 @foo(double %div, double %div1) >> ret void >> } >> >> to: >> >> define void @t1b(double %a, double %b, double %d) { >> entry: >> %div = fdiv fast double 1.000000e+00, %d >> %mul = fmul fast double %div, %a >> %mul1 = fmul fast double %div, %b >> %call = tail call i32 @foo(double %mul, double %mul1) >> ret void >> } >> >> Is such a transformation best done as a (target-specific) DAG combine? >> >> A similar instcombine already exists for the X/C->X*1/C case (s...
2013 Oct 30
3
[LLVMdev] loop vectorizer
On 30 October 2013 09:25, Nadav Rotem <nrotem at apple.com> wrote: > The access pattern to arrays a and b is non-linear. Unrolled loops are > usually handled by the SLP-vectorizer. Are ir0 and ir1 consecutive for all > values for i ? > Based on his list of values, it seems that the induction stride is linear within each block of 4 iterations, but it's not a clear
2013 Oct 30
3
[LLVMdev] loop vectorizer
...e IR printed by 'opt': > > entry: > %cmp9 = icmp ult i64 %start, %end > br i1 %cmp9, label %for.body, label %for.end > > for.body: ; preds = %entry, %for.body > %storemerge10 = phi i64 [ %inc, %for.body ], [ %start, %entry ] > %div = lshr i64 %storemerge10, 2 > %mul1 = shl i64 %div, 3 > %rem = and i64 %storemerge10, 3 > %add2 = or i64 %mul1, %rem > %0 = lshr i64 %storemerge10, 1 > %add51 = shl i64 %0, 2 > %mul6 = or i64 %rem, %add51 > %add8 = or i64 %mul6, 4 > %arrayidx = getelementptr inbounds float* %a, i64 %add2 > %1 = load float* %ar...
2017 Mar 15
2
Data structure improvement for the SLP vectorizer
...tptr inbounds double, double* %data3, i32 2 %element33 = getelementptr inbounds double, double* %data3, i32 3 %load30 = load double, double* %data3 %load31 = load double, double* %element31 %load32 = load double, double* %element32 %load33 = load double, double* %element33 %mul1 = fmul fast double %load20, %load10 %mul2 = fmul fast double %load21, %load11 %mul3 = fmul fast double %load22, %load10 %mul4 = fmul fast double %load23, %load11 %add1 = fadd fast double %load30, %mul1 %add2 = fadd fast double %load31, %mul2 %add3 = fadd fast double %load32...
2017 Jul 28
0
Error in `[[<-.data.frame`(`*tmp*`, alt.name, value = integer(0)) with mlogit
...error below? > sandoz > >> library(mlogit) >> horse1.data<-read.csv("cte2.csv", header=TRUE, sep=";") >> h1.dat<-mlogit.data(data=horse1.data,choice="win",chid.var="raceid",alt.var="noChev",shape="long") > #mul1.model<-mlogit(win~cteD+cteTh|0|0,data=h1.dat) > #summary(mul1.model) > > Error in `[[<-.data.frame`(`*tmp*`, alt.name, value = integer(0)) : > le tableau de remplacement a 0 lignes, le tableau remplac? en a 26 > >> head(horse1.data,27) > raceid nbChev cteD cteTh...
2019 Jul 22
1
[RFC] A new multidimensional array indexing intrinsic
...> > A multidim index of the form: > > > ``` > > > %arrayidx = llvm.multidim.array.index.* i64 i64* %A, %str_1, %idx_1, %str_2, %idx_2 > > > ``` > > > > > > is lowered to: > > > > > > ``` > > > %mul1 = mul nsw i64 %str_1, %idx_1 > > > %mul2 = mul1 nsw i64 %str_2, %idx_2 > > > %total = add nsw i64 %mul2, %mul1 > > > %arrayidx = getelementptr inbounds i64, i64* %A, i64 %total, !multidim !1 > > > ``` > > > with guarantees that the fi...
2013 Aug 08
0
[LLVMdev] Convert fdiv - X/Y -> X*1/Y
...= fdiv fast double %b, %d > %call = tail call i32 @foo(double %div, double %div1) > ret void > } > > to: > > define void @t1b(double %a, double %b, double %d) { > entry: > %div = fdiv fast double 1.000000e+00, %d > %mul = fmul fast double %div, %a > %mul1 = fmul fast double %div, %b > %call = tail call i32 @foo(double %mul, double %mul1) > ret void > } > > Is such a transformation best done as a (target-specific) DAG combine? > > A similar instcombine already exists for the X/C->X*1/C case (see the > CvtFDivConstToRe...
2015 Mar 25
0
[PATCH] nv50/ir: take postFactor into account when doing peephole optimizations
...ier(0); i->src(1).mod = Modifier(0); + i->postFactor = 0; i->setSrc(0, new_ImmediateValue(i->bb->getProgram(), res.data.u32)); i->setSrc(1, NULL); @@ -682,7 +685,7 @@ ConstantFolding::tryCollapseChainedMULs(Instruction *mul2, Instruction *insn; Instruction *mul1 = NULL; // mul1 before mul2 int e = 0; - float f = imm2.reg.data.f32; + float f = imm2.reg.data.f32 * exp2f(mul2->postFactor); ImmediateValue imm1; assert(mul2->op == OP_MUL && mul2->dType == TYPE_F32); @@ -782,9 +785,10 @@ ConstantFolding::opnd(Instruction *i, Im...
2017 Jul 27
2
Error in `[[<-.data.frame`(`*tmp*`, alt.name, value = integer(0)) with mlogit
...t;) > h1.dat<-mlogit.data(data=horse1.data,choice="win",chid.var="raceid",alt.var="nbChev",shape="long") Error in `[[<-.data.frame`(`*tmp*`, alt.name, value = integer(0)) : le tableau de remplacement a 0 lignes, le tableau remplac? en a 26 > mul1.model<-mlogit(win~cteD+cteTh|0|0,data=h1.dat) Error in mlogit(win ~ cteD + cteTh | 0 | 0, data = h1.dat) : object 'h1.dat' not found > head(horse.data,27) raceid.nbChev.cteD.cteTh.win 1 1;9;29.6;23.8;no 2 1;9;5.3;6.7;no 3 1;9;10.9;11.5;...
2013 Oct 30
0
[LLVMdev] loop vectorizer
...;> >> entry: >> %cmp9 = icmp ult i64 %start, %end >> br i1 %cmp9, label %for.body, label %for.end >> >> for.body: ; preds = %entry, %for.body >> %storemerge10 = phi i64 [ %inc, %for.body ], [ %start, %entry ] >> %div = lshr i64 %storemerge10, 2 >> %mul1 = shl i64 %div, 3 >> %rem = and i64 %storemerge10, 3 >> %add2 = or i64 %mul1, %rem >> %0 = lshr i64 %storemerge10, 1 >> %add51 = shl i64 %0, 2 >> %mul6 = or i64 %rem, %add51 >> %add8 = or i64 %mul6, 4 >> %arrayidx = getelementptr inbounds float* %a, i64 %ad...
2017 Jul 27
3
Error in `[[<-.data.frame`(`*tmp*`, alt.name, value = integer(0)) with mlogit
...oice="win",chid.var="raceid",alt.var="nbChev",shape="long") >> >> Error in `[[<-.data.frame`(`*tmp*`, alt.name, value = integer(0)) : >> le tableau de remplacement a 0 lignes, le tableau remplac? en a 26 >> >> >>> mul1.model<-mlogit(win~cteD+cteTh|0|0,data=h1.dat) >> Error in mlogit(win ~ cteD + cteTh | 0 | 0, data = h1.dat) : >> object 'h1.dat' not found >> >> >>> head(horse.data,27) >> raceid.nbChev.cteD.cteTh.win >> 1 1;9;29.6;23.8;no &gt...