2012-10-23 15 views
9

मैं सोच रहा हूँ क्यों LLVM निम्नलिखित आईआर कोड का अनुकूलन करने में विफल रहता है (अनुकूलन '3' के लिए सेट के साथ PassManagerBuilder का उपयोग कर, और यह भी का उपयोग कर LLVM की 'ऑप्ट' उपकरण):LLVM Struct वापसी अनुकूलन

%GenericStruct = type { i32 } 

define void @makeGenericStructOuter(%GenericStruct* noalias nocapture sret) { 
entry: 
    %1 = alloca %GenericStruct 
    call void @makeGenericStructInner(%GenericStruct* %1) 
    %2 = load %GenericStruct* %1 
    store %GenericStruct %2, %GenericStruct* %0 
    ret void 
} 

declare void @makeGenericStructInner(%GenericStruct* noalias nocapture sret) 

अपेक्षित कोड है:

%GenericStruct = type { i32 } 

define void @makeGenericStructOuter(%GenericStruct* noalias nocapture sret) { 
entry: 
    call void @makeGenericStructInner(%GenericStruct* %0) 
    ret void 
} 

declare void @makeGenericStructInner(%GenericStruct* noalias nocapture sret) 

क्या इस मामले को संभालने के लिए वर्तमान में कोई अनुकूलन उपलब्ध नहीं है? या मैं उत्पादन करने में असफल रहा हूं (यह कोड सामने वाले अंत से उत्पन्न होता है) सही आईआर जो अनुकूलन की अनुमति देगा?

इससे पहले कि यह सुझाव दिया गया है कि मैं मूल्य से लौटाता कोड उत्पन्न नहीं कर सकता क्योंकि इन कार्यों को अन्य मॉड्यूल/पुस्तकालयों से कॉल करने योग्य होना चाहिए जो 'जेनेरिकस्ट्रक्चर' के आकार या सामग्री को नहीं जानते हैं (और वे स्थानीय रूप से 'टेस्ट क्लास घोषित करेंगे 'के रूप में' संरचना अपारदर्शी ')।

+0

क्या आप '@ makeGenericStructOuter' हस्ताक्षर में'% 0' को नहीं भूल गए? – arrowd

+2

मुझे इसके बारे में भी आश्चर्य है, क्योंकि यह कई मामलों में ईएमएसस्क्रिप्ट-जेनरेट कोड की गुणवत्ता में सुधार करेगा। यहां वह प्रतिबद्धता है जहां एक प्रासंगिक एलएलवीएम अनुकूलन पास हटा दिया गया था: http://llvm.org/viewvc/llvm-project?view=revision&revision=129314 –

उत्तर

1

यदि आप उस अनुकूलन को मानते हैं, तो LLVM Bug Tracker में एक बग की रिपोर्ट करें। ऑप्टिमाइज़ेशन अवसरों की रिपोर्ट करते समय एलएलवीएम डेवलपर्स आमतौर पर बहुत खुश और रुचि रखते हैं।

संबंधित मुद्दे