Skip to content

Commit c51d08a

Browse files
committed
[bolt][aarch64] Add load-acquire & store-release instructions
This patch adds checking for the load-acquire & store-release instructions since a operand can be SP register.
1 parent 60a18d6 commit c51d08a

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

bolt/lib/Target/AArch64/AArch64MCPlusBuilder.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
661661
case AArch64::LDTRBi:
662662
case AArch64::LDTRSBWi:
663663
case AArch64::LDTRSBXi:
664+
case AArch64::LDARB:
664665
return true;
665666
default:
666667
break;
@@ -699,6 +700,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
699700
case AArch64::LDTRHi:
700701
case AArch64::LDTRSHWi:
701702
case AArch64::LDTRSHXi:
703+
case AArch64::LDARH:
702704
return true;
703705
default:
704706
break;
@@ -733,6 +735,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
733735
case AArch64::LDPSWpost:
734736
case AArch64::LDPSWpre:
735737
case AArch64::LDNPWi:
738+
case AArch64::LDARW:
736739
return true;
737740
default:
738741
break;
@@ -756,6 +759,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
756759
case AArch64::LDPXi:
757760
case AArch64::LDPXpost:
758761
case AArch64::LDPXpre:
762+
case AArch64::LDARX:
759763
return true;
760764
default:
761765
break;
@@ -1926,9 +1930,23 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
19261930
return false;
19271931
};
19281932

1933+
auto isStoreRelease = [&]() {
1934+
switch (opcode) {
1935+
case AArch64::STLRB:
1936+
case AArch64::STLRH:
1937+
case AArch64::STLRW:
1938+
case AArch64::STLRX:
1939+
return true;
1940+
default:
1941+
break;
1942+
}
1943+
1944+
return false;
1945+
};
1946+
19291947
return isStoreRegUnscaleImm() || isStoreRegScaledImm() ||
19301948
isStoreRegImmPreIndexed() || isStoreRegImmPostIndexed() ||
1931-
isStoreRegUnscaleUnpriv() || isStoreRegTrunc();
1949+
isStoreRegUnscaleUnpriv() || isStoreRegTrunc() || isStoreRelease();
19321950
}
19331951

19341952
bool mayStore(const MCInst &Inst) const override {

0 commit comments

Comments
 (0)