File tree Expand file tree Collapse file tree 2 files changed +18
-10
lines changed Expand file tree Collapse file tree 2 files changed +18
-10
lines changed Original file line number Diff line number Diff line change @@ -155,11 +155,19 @@ class NVPTXTargetLowering : public TargetLowering {
155155 Instruction *I = nullptr ) const override ;
156156
157157 bool isTruncateFree (Type *SrcTy, Type *DstTy) const override {
158- // Truncating 64-bit to 32-bit is free in SASS.
159- if (!SrcTy->isIntegerTy () || !DstTy->isIntegerTy ())
158+ if (!(SrcTy->isIntegerTy () && DstTy->isIntegerTy ()))
160159 return false ;
161- return SrcTy->getPrimitiveSizeInBits () == 64 &&
162- DstTy->getPrimitiveSizeInBits () == 32 ;
160+ if (SrcTy->getPrimitiveSizeInBits () <= DstTy->getPrimitiveSizeInBits ())
161+ return false ;
162+ return DstTy->getPrimitiveSizeInBits () % 32 == 0 ;
163+ }
164+
165+ bool isTruncateFree (EVT FromVT, EVT ToVT) const override {
166+ if (!(FromVT.isScalarInteger () && ToVT.isScalarInteger ()))
167+ return false ;
168+ if (FromVT.getSizeInBits () <= ToVT.getSizeInBits ())
169+ return false ;
170+ return ToVT.getSizeInBits () % 32 == 0 ;
163171 }
164172
165173 EVT getSetCCResultType (const DataLayout &DL, LLVMContext &Ctx,
Original file line number Diff line number Diff line change @@ -8,13 +8,13 @@ define [2 x i128] @foo(i64 %a, i32 %b) {
88; CHECK-NEXT: .reg .b64 %rd<5>;
99; CHECK-EMPTY:
1010; CHECK-NEXT: // %bb.0:
11- ; CHECK-NEXT: ld.param.u32 %r1, [foo_param_1];
1211; CHECK-NEXT: ld.param.u64 %rd1, [foo_param_0];
13- ; CHECK-NEXT: shr.s64 %rd2, %rd1, 63;
14- ; CHECK-NEXT: cvt.s64.s32 %rd3, %r1;
15- ; CHECK-NEXT: shr.s64 %rd4, %rd3, 63;
16- ; CHECK-NEXT: st.param.v2.b64 [func_retval0], {%rd1, %rd2};
17- ; CHECK-NEXT: st.param.v2.b64 [func_retval0+16], {%rd3, %rd4};
12+ ; CHECK-NEXT: ld.param.s32 %rd2, [foo_param_1];
13+ ; CHECK-NEXT: cvt.u32.u64 %r1, %rd2;
14+ ; CHECK-NEXT: shr.s64 %rd3, %rd1, 63;
15+ ; CHECK-NEXT: shr.s64 %rd4, %rd2, 63;
16+ ; CHECK-NEXT: st.param.v2.b64 [func_retval0], {%rd1, %rd3};
17+ ; CHECK-NEXT: st.param.v2.b64 [func_retval0+16], {%rd2, %rd4};
1818; CHECK-NEXT: ret;
1919 %1 = sext i64 %a to i128
2020 %2 = sext i32 %b to i128
You can’t perform that action at this time.
0 commit comments