Skip to content

Commit 75656d8

Browse files
authored
[X86] combineStore - remove rangedata when converting 64-bit copies to f64 load/store (#147904)
We're changing from i64 to f64 - we can't retain any range metadata Fixes #147781
1 parent 8055c0f commit 75656d8

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53574,6 +53574,10 @@ static SDValue combineStore(SDNode *N, SelectionDAG &DAG,
5357453574

5357553575
SDLoc LdDL(Ld);
5357653576
SDLoc StDL(N);
53577+
53578+
// Remove any range metadata as we're converting to f64 load/store.
53579+
Ld->getMemOperand()->clearRanges();
53580+
5357753581
// Lower to a single movq load/store pair.
5357853582
SDValue NewLd = DAG.getLoad(MVT::f64, LdDL, Ld->getChain(),
5357953583
Ld->getBasePtr(), Ld->getMemOperand());

llvm/test/CodeGen/X86/pr147781.ll

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s -mtriple=i686-pc-windows-gnu -verify-machineinstrs | FileCheck %s
3+
4+
; Ensure i64 !range data is stripped when converting to f64 load/store.
5+
define void @test(ptr %p, ptr %p2) #0 {
6+
; CHECK-LABEL: test:
7+
; CHECK: # %bb.0:
8+
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
9+
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
10+
; CHECK-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
11+
; CHECK-NEXT: movsd %xmm0, (%eax)
12+
; CHECK-NEXT: retl
13+
%val = load i64, ptr %p, align 8, !range !0
14+
store i64 %val, ptr %p2, align 8
15+
ret void
16+
}
17+
18+
attributes #0 = { "target-cpu"="pentium4" }
19+
!0 = !{i64 1, i64 0}

0 commit comments

Comments
 (0)